我在我的服务器上托管了一个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);
答案 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