我已经开始为FedEx的webservice API编写接口。他们有我感兴趣的3种不同的API;费率,运送和跟踪。我正在使用SvcUtil.exe生成服务代理。Coerce类型在C#中具有相同布局的不同命名空间中
FedEx在各自的WSDL文件中指定了不同的服务端点。每个服务端点都有它自己的XML命名空间(如http://fedex.com/ws/rate/v5和http://fedex.com/ws/ship/v5)
服务端点确实使用了不少相同的类型,如地址,测量,重量,AuthenticationDetail,ClientDetail等..
这里问题在哪里,我可以同时向SvcUtil.exe提供所有WSDL文件,通常它会将任何相同类型合并为一个共享类型,但由于FedEx的每个服务都位于其自己的命名空间中,因此它们会重新声明这些名称空间下的每个WSDL文件中的这些类型,而我最终将为每个名称空间分配一个地址,地址1和地址2。
为了解决这个问题,我现在要做的是通过svcutil单独运行每个WSDL,并将它们分别放在它们自己的.NET名称空间(例如FedEx.Rate,FedEx.Ship,FedEx.Track)中。与此问题是,现在我在每个名称空间(Fedex.Rate.Address,FedEx.Ship.Address)中有一个不同的地址类型。
这使得在GetAuthenticationDetail()工厂方法之类的服务之间使用的代码变得很难推广,所以我不必在每个使用不同服务的地方重复使用代码。
有没有什么办法在C#中强制FedEx.Rate.Address到FedEx.Ship.Address?
+1。我正在努力解决同样的问题,从来没有找到一个很好的解决方案。 – 2009-02-18 19:53:08
伟大的问题;我以为我错误地导入了WSDL,直到我看得更近,而且他们确实为不同的名称空间分配了相同的类型。 – 2009-07-16 00:01:19