我在PCL中使用ChannelFactory
来使用WCF服务。我的配置看起来像这样:
<client>
<endpoint
address="https://www.site.com/ProductService.svc"
binding="customBinding"
contract="Interface.IProductService"
...
使用它的代码如下所示:
Binding binding = new BasicHttpBinding(BasicHttpSecurityMode.TransportCredentialOnly);
ChannelFactory<Interface.IProductService> cf = new
ChannelFactory<Interface.IProductService>();
Interface.IProductService tc = cf.CreateChannel();
tc.GetProduct(1);
我遇到的问题是我被要求在ChannelFactory构造函数中提供端点名称。是否可以让ChannelFactory仅从合同中推断出正确的终点?
答案 0 :(得分:0)
除非我误解了你的问题,否则没有。端点是ABC的组合,而不仅仅是合同,您可能有不同的端点用于不同的协议。但是,除非你有一些其他的复杂因素没有命名,否则给端点提供合同的名称是非常简单的,只需按名称拉出它:
<client>
<endpoint name="IProductService"
address="https://www.site.com/ProductService.svc"
binding="customBinding"
contract="Interface.IProductService"
...
然后:
Binding binding = new BasicHttpBinding(BasicHttpSecurityMode.TransportCredentialOnly);
string typeName = typeof(Interface.IProductService).Name;
ChannelFactory<Interface.IProductService> cf = new
ChannelFactory<Interface.IProductService>(typeName);
Interface.IProductService tc = cf.CreateChannel();
tc.GetProduct(1);
当然,如果你为很多服务做这件事,那就不实用了。但是,如果你以相同的系统方式进行,我发现从基础接口派生这些接口很有用,并将整个ChannelFactory
管理问题作为中间人ChannelFactory<T> where T : IMyBaseContractInterface
处理。