将此app.config xml转换为代码? (WCF)

时间:2009-04-08 16:05:31

标签: .net wcf app-config

我有以下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的好地方。

谢谢!

2 个答案:

答案 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...