svcutil不会生成soap客户端

时间:2014-02-10 16:41:28

标签: .net soap wsdl

我有一个我想要连接的网络服务,我无法弄清楚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有什么问题吗?

2 个答案:

答案 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