簡體   English   中英

與Unity共享WCF服務合同

[英]Sharing WCF Service Contracts with Unity

我對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>()))

再次感謝!

首先,檢查您是否指示服務參考工具“重用類型”。 當您轉到“添加服務引用...”時,單擊“高級”並確認已選中“在引用的程序集中復用類型”選項。

如果選中此選項(我相信這是默認行為),則可能無法通過添加“服務引用”來完成您想要的操作。

共享合同是首選的WCF模式(我認為),但是我通常采用的實現是使用ChannelFactory類實例化客戶端連接,而不是使用生成的代理。 生成的代理很好-快速又容易-但是笨重並且需要維護。

復審有關在WCF中使用ChannelFactory和Proxies的 MSDN鏈接以進行討論,並查看此CodeProject鏈接以獲取示例用法。

代碼偽像svcutil產生吮吸。 但是,到目前為止,它們是使用WCF提供的去耦的最簡單(即最便宜)的方式。 重用合同和實體是服務和消費者之間的緊密耦合

如果您想讓容器為WCF服務生成客戶端代理,則可以使用Unity擴展來解決問題 它還支持WCF4發現功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM