我有一个我想要连接的网络服务,我无法弄清楚wsdl出了什么问题。
wsdl位于“http://marketplacebylaredoute.fr/spapi/SellerOrderService?wsdl”。然后我尝试运行svcutil http://marketplacebylaredoute.fr/spapi/SellerOrderService?wsdl并且它失败了。 错误如下(仅提取)
Error: Cannot import wsdl:portType
Detail: An exception was thrown while running a WSDL import extension: System.Se
rviceModel.Description.XmlSerializerMessageContractImporter
Error: These members may not be derived.
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://Redcats/Order
/SellerOrder/2.0']/wsdl:portType[@name='portType']
知道这个wsdl有什么问题吗?
答案 0 :(得分:8)
问题来自<wsdl:part>
这样的问题:
<wsdl:part element="ns5:UpdateSellerOrderRequest_2.0" name="parameters">
当name="parameters"
时,svcutil.exe认为该服务是doc / literal / wrapped。
如果您将其更改为parameters
以外的其他内容,则svcutil.exe会将其解释为doc / literal / bare。
解决方案是:
使用Fiddler创建一个将parameters
更改为parameters1
的代理。
快速而脏的代码:
static function OnBeforeResponse(oSession: Session) {
if (m_Hide304s && oSession.responseCode == 304) {
oSession["ui-hide"] = "true";
}
oSession.utilDecodeResponse();
oSession.utilReplaceInResponse('parameters', 'parameters1');
}
答案 1 :(得分:0)
在Dave的答案中: 如果您使用的是Visual Studio,还可以通过保存wdsl并在本地对其进行更改,将参数名称更改为parameter1。
用parameter1替换所有参数
通过将路径添加到myservice.wdsl文件(例如c:\ webserice \ myservice.wdsl)来添加服务引用
您可以找到更多答案here