我知道我可以像以下代码那样在WCF中动态创建客户端端点连接:
BasicHttpBinding basic =
new BasicHttpBinding(BasicHttpSecurityMode.TransportCredentialOnly);
basic.Security.Transport.ClientCredentialType =
HttpClientCredentialType.Ntlm;
EndpointAddress serviceAddress =
new EndpointAddress("http://whatever/service.svc");
YourServiceClient m_client = new YourServiceClient(basic, serviceAddress);
问题是在这种情况下我需要知道'YourServiceClient'是什么。我想要做的是从数据库中获取“YourServiceClient”类型,其中存储为对象。有谁知道我会怎么做这样的事情?我在从DB中检索到的对象中有'YourServiceClient'的值吗?
答案 0 :(得分:0)
尼古拉斯·艾伦在他的博客中提到了这样的事情(我认为),从part 1开始
IIRC还有一种能够接收原始XML消息的能力,然后您可以自己处理,而不是使用特定类型的代理。
答案 1 :(得分:0)
你无法做到这一点。基本上,您要求在运行时获取未知,但在编译时绑定到已知类型。如果您尝试访问的服务具有某种共享接口,则无法完成此操作。
如果它们具有相同的接口(意味着,同一组方法等等),那么您可以使用此处的示例在运行时创建自己的通道工厂,并获取实现服务接口的代理:
答案 2 :(得分:0)
如果能够在这里使用泛型(如果没有,那么你可能不得不使用一些反射),那么这就是你所追求的吗?
public TContract GetService<TContract>(EndpointAddress address){
var channelFactory = new ChannelFactory<TContract>(new NetTcpBinding(),address);
return channelFactory.CreateChannel();
}