2012-01-09 51 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