【问题标题】:Sharing WCF Service Contracts with Unity与 Unity 共享 WCF 服务合同
【发布时间】:2012-03-29 04:41:58
【问题描述】:

我是 WCF 的新手,我希望在一个解决方案中的服务和另一个解决方案中的服务使用者之间共享服务合同和数据合同。我创建了一个单独的项目,在包含服务合同和数据合同的两个解决方案之间共享。当我引用我的服务时,正在共享数据合同,但不共享服务合同。我的合同如下所示:

[ServiceContract]
public interface IDistributionService
{
    [OperationContract]
    [ServiceKnownType(typeof (Distribution))]
    bool AddDistributions(Distribution[] oDistributions);
}

当我查看 reference.cs 文件时,我正在使用 Distribution 对象,但它再次生成 IDistributionService 合同,这里是 reference.cs 文件的摘录:

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ServiceModel.ServiceContractAttribute(ConfigurationName="eDistributorService.IDistributionService")]
public interface IDistributionService {
   [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IDistributionService/AddDistributions", ReplyAction="http://tempuri.org/IDistributionService/AddDistributionsResponse")]
    bool AddDistributions(mhcb.syd.eDistribution.WebServices.Contracts.DTO.Distribution[] oDistributions);
    }

有没有办法让消费者使用 IDistributionService 接口而不在 reference.cs 文件中生成具体实例?

我想知道的主要原因是我可以使用依赖注入(统一)。

.RegisterType<IDistributionService, DistributionServiceClient>(
                new Interceptor<InterfaceInterceptor>(),
                new InterceptionBehavior(container.Resolve<IInterceptionBehavior>()))

再次感谢!

【问题讨论】:

    标签: c# wcf unity-container


    【解决方案1】:

    首先检查您是否在指示服务引用工具“重用类型”。当您转到“添加服务引用...”时,单击“高级”并确认已选中“在引用的程序集中重用类型”选项。

    如果选中此项(我相信这是默认行为),那么您可能无法通过添加“服务引用”来做您想做的事情。

    共享契约是首选的 WCF 模式(在我看来),但我通常采用的实现是使用 ChannelFactory 类来实例化客户端连接,而不是使用生成的代理。生成的代理很好 - 它快速简单 - 但它很笨重并且需要维护。

    查看Using ChannelFactory vs Proxies in WCF 上的此 MSDN 链接以进行讨论,并查看此 CodeProject link 以获取示例用法。

    【讨论】:

    • 您还可以通过搜索“ChannelFactory”找到大量在线资源和 SO 问题。
    【解决方案2】:

    svcutil 产生的代码伪像很糟糕。但它们是迄今为止使用 WCF 提供的解耦的最简单(即最便宜)的方法。重用合约和实体是服务和消费者的tight coupling

    如果您希望您的容器为 WCF 服务生成客户端代理,您可以使用 extension for Unity 来解决问题。它也支持 WCF4 发现功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-10
      • 1970-01-01
      相关资源
      最近更新 更多