【问题标题】:Consume same WCF Service from multiple projects in solution从解决方案中的多个项目使用相同的 WCF 服务
【发布时间】:2014-02-12 19:07:49
【问题描述】:

情况:

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

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

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

问题:

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

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

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

问题:

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

【问题讨论】:

  • 你的 WCF 是 SOAP 吗?如果是,那么您就在正确的道路上。但是如果你的服务是 RESTFul 的,那你为什么不使用 WebRequest 呢?
  • @MuneebAmjad 服务是 SOAP。
  • 为什么不把所有的服务引用放到一个类库项目中,然后引用那个项目呢?你甚至可以制作代理类internal,并通过外观类只公开你喜欢的接口。
  • @JohnSaunders 这 IS 我现在正在做的事情。但可执行项目需要(由 Microsoft 预定义)端点配置。这些伴随着添加服务引用。我可以手动添加它们,但这确实是一个痛苦的**...
  • 没有。在共享类库中添加和更新。将共享库的 app.config 中的配置复制到 .exe 项目的配置文件中。根据需要更新。

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    • 2013-02-12
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    • 2019-07-07
    相关资源
    最近更新 更多