我有以下app.config部分,我需要将其转换为代码。我已经看过几个例子,但仍然无法让它发挥作用。有人可以帮忙吗?
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="MyService"
closeTimeout="00:01:00"
openTimeout="00:01:00"
receiveTimeout="00:10:00"
sendTimeout="00:01:00"
allowCookies="false"
bypassProxyOnLocal="false"
hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536"
maxBufferPoolSize="524288"
maxReceivedMessageSize="65536"
messageEncoding="Text"
textEncoding="utf-8"
transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32"
maxStringContentLength="8192"
maxArrayLength="16384"
maxBytesPerRead="4096"
maxNameTableCharCount="16384" />
<security mode="TransportWithMessageCredential">
<transport clientCredentialType="None"
proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName"
algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="https://server.com/service/MyService.asmx"
binding="basicHttpBinding" bindingConfiguration="MyService"
contract="MyService.MyServiceInterface"
name="MyService" />
</client>
</system.serviceModel>
我的用例是我正在编写一个将被其他非.NET应用程序使用的dll,从此我没有放置app.config的好地方。
谢谢!
答案 0 :(得分:2)
你可以使用这样的东西(它看起来很标准的basicHttpBinding):
BasicHttpBinding binding = new BasicHttpBinding();
Uri endpointAddress = new Uri("https://server.com/service/MyService.asmx");
ChannelFactory<MyService.MyServiceInterface> factory = new ChannelFactory<MyService.MyServiceInterface>(binding, endpointAddress);
MyService.MyServiceInterface proxy = factory.CreateChannel();
只要你有一个包含合同(“MyService.MyServiceInterface”)的DLL,你就可以在你的客户端中引用它。
如果你需要在服务端使用它,你将不得不使用一些不同的类等 - 但基础是相同的(创建一个绑定,创建一个或多个端点地址,绑定它们)。
马克
PS:对不起,我刚注意到您使用的是https://地址 - 可能需要在代码中进行一些额外的安全配置。
答案 1 :(得分:1)
谢谢marc_s,你带领我朝着正确的方向前进!
对于任何感兴趣的人,以下是使其适用于SSL的代码:
BasicHttpBinding binding = new BasicHttpBinding();
binding.Security.Mode = BasicHttpSecurityMode.TransportWithMessageCredential;
Uri endpointAddress = new Uri("https://server.com/Service.asmx");
ChannelFactory<MyService.MyServiceInterface> factory = new ChannelFactory<MyService.MyServiceInterface>(binding, endpointAddress.ToString());
factory.Credentials.UserName.UserName = "username";
factory.Credentials.UserName.Password = "password";
MyService.MyServiceInterface client = factory.CreateChannel();
// make use of client to call web service here...