好的,我最近实现了类似的东西,这就是我所做的。我认为它提供了很好的关注点分离,并使您不必在所有可执行文件中生成代理类。
- 创建一个 ServiceContract 项目。这将包含定义 WCF 服务合同的接口。
- 创建一个 ClientProxy 项目,并包含一个 ClientProxy 类。该项目将引用您的 ServiceContact,并将为您的 WCF 服务设置绑定。我建议您将 WCF 服务的 URI 传递给构造函数中的此类。
代理类应如下所示:
public class ClientProxy
{
public IMyWCFService service;
public ClientProxy(string uri)
{
// Any channel setup code goes here
EndpointAddress address = new EndpointAddress(uri);
NetTcpBinding binding = new NetTcpBinding(SecurityMode.Transport);
binding.TransferMode = TransferMode.Streamed;
binding.MaxBufferSize = //whatever
binding.MaxReceivedMessageSize = //whatever
...
ChannelFactory<IMyWCFService> factory = new ChannelFactory<IMyWCFService>(binding, address);
service = factory.CreateChannel();
}
}
现在,您的 WCF 服务项目将包含对 ServiceContract 的引用,并且您将在此处实现接口。
您的可执行文件将包含对 ServiceContract 和 ClientProxy 项目的引用。
我希望这可以帮助你。如果您需要澄清任何事情,请告诉我。