WCF绑定设置 - 告诉我为什么?

时间:2014-08-13 13:18:00

标签: c# wcf

我在我的服务器上托管了一个WCF服务,从另一台服务器上我使用代理(dll)和使用代码来调用它。

当这些设置已经在服务器的web.confg上时,为什么我需要在代码中提供设置?告诉我为什么?

示例:

配置:

  <system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding openTimeout="00:10:00" 
                 closeTimeout="00:10:00" 
                 sendTimeout="00:10:00" 
                 receiveTimeout="00:10:00">
        </binding>

然后再次在Code中,

        WSHttpBinding binding = new WSHttpBinding();
        binding.OpenTimeout = new TimeSpan(0, 10, 0);
        binding.CloseTimeout = new TimeSpan(0, 10, 0);
        binding.SendTimeout = new TimeSpan(0, 10, 0);
        binding.ReceiveTimeout = new TimeSpan(0, 10, 0);
          EndpointAddress endpoint = new EndpointAddress(url + "/_vti_bin/cats/fruits.svc");

        ChannelFactory<SomeSolution.IFruit> factory = new ChannelFactory<SomeSolution.IFruit>(binding);
        factory.Credentials.Windows.ClientCredential = creds;
        factory.Credentials.UserName.UserName = creds.UserName;
        factory.Credentials.UserName.Password = creds.Password;

        SomeSolution.IFruit proxy = factory.CreateChannel(endpoint);

1 个答案:

答案 0 :(得分:2)

因此,您在服务器A中托管了WCF服务,并从另一个服务器B(即服务的客户端)调用它。您手工制作了客户端代理,并没有编写读取客户端应用配置的代码。

为什么要手工制作代理类?虽然您可以通过引用服务或运行svcutil.exe来使用生成的代码。如果您提供在app config中定义的端点名称,则生成的代理类可以默认读取配置。换句话说,当创建生成的代理类的实例时,它将使用配置,并且如果需要,您可以在使用实例之前动态地覆盖代码中的已加载设置。

对于常见的应用程序开发,您很少需要手工制作WCF代码,例如factory.CreateChannel。我只使用这种低级WCF代码一次来解决WCF缺陷。

对于使用WCF服务的常见做法,互联网上有大量的教程,例如http://www.codeproject.com/Articles/627240/WCF-for-the-Real-World-Not-Hello-World