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

时间:2014-02-12 19:07:49

标签: c# wcf proxy-classes endpoints multiple-projects

情况:

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

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

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

问题:

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

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

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

问题:

有没有很好的解决方案来添加服务引用而不在共享项目中创建端点配置而不在可执行应用程序中创建代理类?

1 个答案:

答案 0 :(得分:0)

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

  • 创建一个ServiceContract项目。这将包含定义WCF服务合同的接口。
  • 创建一个ClientProxy项目,并包含一个ClientProxy类。这个 项目将引用您的ServiceContact,并将设置 您的WCF服务的绑定。我建议你传递URI 您的WCF服务在构造函数中加入此类。

代理类看起来像这样:

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项目的引用。

我希望这会对你有所帮助。如果您需要澄清任何事情,请告诉我。