0

情况:

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

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

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

问题:

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

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

  • Executable App #1 只需要端点(可以使用共享项目的代理类)
  • Executable App #2 只需要端点(同上)
  • 共享项目只需要代理类

问题:

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

4

1 回答 1

0

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

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

我希望这可以帮助你。如果您需要澄清任何事情,请告诉我。

于 2014-02-12T21:33:53.437 回答