【问题标题】:WCF DataContract centralizationWCF DataContract 集中化
【发布时间】:2013-07-04 17:50:04
【问题描述】:

我有几个 WCF 服务使用相同的 dataContracts 在它们之间交换数据。

我可以有一种元数据端点来集中管理所有这些模式吗?

当创建一个新的 WCF 服务时,我怎样才能让它从元数据端点加载架构(而不是重新定义它们)以在其 operationContracts 中使用?

谢谢!

【问题讨论】:

  • 我不确定我是否理解您的问题,但如果您希望在多个服务之间使用相同的数据协定,只需将它们放入一个单独的程序集中并让每个服务引用该程序集。
  • 什么意思:元数据端点?和集中管理所有这些模式?你的架构是什么?什么是集中管理?

标签: wcf soa


【解决方案1】:

正如我在评论中所说,我不确定我是否理解您的问题(至少在需要元数据端点方面),但听起来您希望能够在多个不同的服务中重用现有数据合同.

最简单的方法是将数据契约放在单独的程序集(类库 - DLL)中,然后让服务引用该程序集 - 它们不必在服务本身内部定义。

这是一个简单的示例(代码仅用于说明,并非旨在实际执行任何操作或作为完整示例):

MyDataContracts 程序集

namespace MyDataContracts
{

    [DataContract]
    public class DataContract1
    {

    }

    [DataContract]
    public class DataContract2
    {

    }
}

MyService1 程序集

using MyDataContracts;

namespace MyService1
{

    [ServiceContract]
    public interface IMyService1
    {

        [OperationContract]
        DataContract1 GetSomeData(string someParm);
    }   
}

MyService2 程序集

using MyDataContracts;

namespace MyService2
{

    [ServiceContract]
    public interface IMyService2
    {

        [OperationContract]
        void SendSomeData(DataContract1 dc);

        [OperationContract]
        DataContract2 GetSomeOtherData(int parm);
    }
}

当然,每个 WCF 服务项目还需要包含对 MyDataContracts 程序集的引用。

现在,无论何时创建新服务,您只需添加对 MyDataContracts.dll 的引用,即可在其中重复使用您的数据合约。

【讨论】:

  • 同意,然后从客户端我们 ChannelFactory [1] 与该共享程序集中的合同,并完全避免添加服务引用。 [1]msdn.microsoft.com/en-us/library/ms734681.aspx
  • @kellyb - 是的,如果服务合同在共享程序集中。 ChannelFactory 不应考虑数据协定。
  • 谢谢!我在使用 WCF kewyord 时犯了一个错误。假设您有一个团队在 wcf 中实现服务,而另一个团队在 Java 中实现。共享 dll 方法不起作用。我希望能够以独立于平台的方式集中合同定义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-08
  • 1970-01-01
  • 2011-06-28
  • 2011-02-04
  • 2013-08-31
  • 1970-01-01
相关资源
最近更新 更多