繁体   English   中英

从解决方案中的多个项目中使用相同的WCF服务

[英]Consume same WCF Service from multiple projects in solution

情况:

我有多个项目的解决方案:

  • 可执行应用程序#1
  • 可执行应用程序2
  • WCF项目
  • 共享项目
  • “其他”项目
  • ...

现在,我需要在我的可执行应用程序#1中使用WCF服务。 例如,从WCF项目中的UserService检索有关用户的信息。 由于这两个可执行文件都需要由UserService处理的登录,因此我在Shared Project中添加了“ Authenticate”方法。 此认证也由UserService处理。

问题:

现在,我必须在每个项目中添加一个服务引用,这实际上不是问题。 但是现在我在所有三个项目中都生成了代理类和端点。

我认为这是一个问题,因为我必须更新所有3个服务引用:

  • 可执行应用程序#1仅需要端点(可以使用共享项目的代理类)
  • 可执行应用程序2仅需要端点(与上面相同)
  • 共享项目仅需要代理类

题:

是否有任何不错的解决方案来添加服务引用,而无需在共享项目中创建端点配置,也无需在可执行应用程序中创建代理类?

好的,最近我实现了与此类似的功能,这就是我所做的。 我认为它提供了很好的关注点分离,使您不必在所有可执行文件中生成代理类。

  • 创建一个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项目的引用。

我希望这可以帮助你。 让我知道您是否需要任何澄清。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM