2012-01-09 57 views
4

我必須使用來自同一提供程序的多個單獨的Web服務。基本上每個功能都有自己的服務(wsdl)。對於互操作,每個wsdl都有對共享類型的引用(例如:xs:import namespace =「http://generic.type.com」/>)。WSDL中的WCF共享類型

在VS中添加服務參考將服務名稱空間作爲這些類型的前綴。 添加兩項服務將產生兩個獨立但相同的類:

var context = new Service1.GenericContext(); 

var contex2 = new Service2.GenericContext(); 

我該如何映射/施放這些結合在一起?我有20多個這樣的服務。

嘗試使用Reference.svcmap中的名稱空間應用程序,但顯示爲faild。我不知道要使用什麼TargetNamespace和ClrNamespace。

ty!

回答

2

代替添加服務引用,您應該使用svcutil.exe爲端點生成一個服務代理文件。

然後,所有服務代理類都將放在您使用命令行開關/ n指定的相同名稱空間中。

然後svcutil.exe調用有很多參數。因此,我建議您將其存儲在批處理文件中,或者更加方便:將Visual Studio中的「生成事件」下的命令調入「預生成事件命令行」。

這是我的客戶端的svcutil調用,它將所有代理類放在一起放在ServiceProxy.cs中。最有可能的,你必須修改路徑以svcutil.exe的,當然還有服務URL:

"%PROGRAMFILES%\Microsoft SDKs\Windows\v7.0A\bin\svcutil.exe" /noLogo /noConfig /out:"$(ProjectDir)ServiceProxy.cs" /t:code /i /l:cs /tcv:Version35 /ser:DataContractSerializer /ct:System.Collections.Generic.List`1 /n:*,Oe.Corporate.CRMFacade.Service.Test http://localhost:3615/Client010/MasterDataService.svc http://localhost:3615/Client010/BusinessPartnerService.svc http://localhost:3615/Client010/MarketingAttrService.svc http://localhost:3615/Client010/ProductTransactionService.svc http://localhost:3615/Client010/ProductDataService.svc http://localhost:3615/Client010/ActivityManagementService.svc http://localhost:3615/Client010/PromotionService.svc 

更新: 我忘了提,除非您添加到底部的預生成事件將失敗的.csproj文件正好在關閉項目元素之上:

<Target Name="PreBuildEvent" Condition="'$(PreBuildEvent)'!=''" DependsOnTargets="$(PreBuildEventDependsOn)"> 
    <Exec WorkingDirectory="$(OutDir)" Command="$(PreBuildEvent)" ContinueOnError="true" /> 
</Target> 
+0

ty!我得到這個錯誤:「底層連接已關閉:無法建立SSL/TLS安全通道的信任關係。」 這些服務位於https上。我無法找到強制接受證書的選項。 – LZW 2012-01-09 17:16:36

+0

請通過將您的機器導入本地商店來指導您的機器信任該遠程證書。這可以通過mmc管理單元完成,或者通過使用IE瀏覽器訪問Web服務更方便,並告訴IE永久信任證書。這會將其導入您當地的認證商店。但是你必須使用IE瀏覽器,因爲Firefox擁有自己的認證商店。 – mono68 2012-01-10 08:40:05

+0

嘗試過IE和MMC,證書列在受信任的根證書頒發機構的mmc中,但仍然不起作用。 在c#中,我可以通過ICertificatePolicy繞過證書。 – LZW 2012-01-10 12:39:56