【问题标题】:Service References vs Assemblies References, using WCF Services服务引用与程序集引用,使用 WCF 服务
【发布时间】:2010-08-16 12:45:35
【问题描述】:

我有一个 WCF 服务(带有服务合同、数据合同等),如下所示:

[ServiceContract(Namespace = "http://company.com/MyCompany.Services.MyProduct")]
public interface IService
{
    [OperationContract]
    CompositeType GetData();
}

[DataContract(Namespace = "http://company.com/MyCompany.Services.MyProduct")]
public class CompositeType
{
    // Whatever
}

如果我想在客户端使用该服务,我认为有两种选择:

  1. 使用服务参考(使用 WDSL)来发布 WCF 服务的 URL;
  2. 使用程序集对程序集的引用包含接口、合同、DataContracts 类。

我在 90% 的情况下使用 .NET 到 .NET 方案。

最好的方法是什么?各有什么优势?

【问题讨论】:

    标签: .net architecture service reference design-patterns


    【解决方案1】:

    如果您真的想将您的服务用作服务,那么您将不得不使用服务引用。否则,您只是将依赖项添加到另一个 DLL,就像任何其他程序集引用一样。

    另外...如果您的服务正在连接到仅存在于服务器上的任何类型的数据库或网络资源,那么服务引用确实是您唯一的选择。如果您添加一个程序集引用,客户端将尝试与资源建立直接连接……这很可能不应该公开。

    添加直接程序集引用而不是服务引用的好处是,您不必经历调用代码作为服务所增加的所有开销(Web 服务器处理请求、实例化服务、序列化对象,执行代码,序列化结果,然后将它们全部传回客户端)。

    【讨论】:

    • Assembly 只引用接口(contracts),实现是一个WCF Services。只有我在客户端中添加对 ServiceContracts 的引用。
    • 如果我有服务参考;如果该服务针对任何给定的客户端实例在不同的机器上运行(例如与相同类型的各种远程服务通信),如何更新服务引用以反映服务的不同位置,或者是否需要更新服务引用? ?当与服务断开连接时,客户端也可以使用这些类型吗?
    猜你喜欢
    • 2016-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-14
    • 1970-01-01
    相关资源
    最近更新 更多