使用svcutil生成代理时出错

时间:2010-12-15 02:47:57

标签: wcf svcutil.exe webservices-client

尝试从此WebService生成代理时(http://scdemo14.infor.com:9014/axis/services/wb:wsclocks-inbound?wsdl)我从svcutil收到此错误:

  

错误:无法从中获取元数据   http://scdemo14.infor.com:9014/axis/services/wb:wsclocks-inbound?wsdl

     

如果这是Windows(R)通信   您拥有的基础服务   访问,请检查您有   启用了元数据发布   指定地址。帮助启用   元数据发布,请参阅   MSDN文档在   http://go.microsoft.com/fwlink/?LinkId=65455

     

WS-Metadata Exchange错误       URI:http://scdemo14.infor.com:9014/axis/services/wb:wsclocks-inbound?wsdl

Metadata contains a reference that cannot be resolved:
     

'http://scdemo14.infor.com:9014/axis/services/wb:wsclocks-inbound?wsdl'。

The content type text/xml; charset=utf-8 of the response message
     

与内容类型不匹配   绑定(application / soap + xml;   字符集= UTF-8)。如果使用自定义   编码器,请确保   IsContentTypeSupported方法是   实施得当。第553号   响应的字节是:'      
  NS1:Client.NoSOAPAction   没有SOAPAction   头球攻门!       usalwsc01           ”。

The remote server returned an error: (500) Internal Server Error.
     

HTTP GET错误       URI:http://scdemo14.infor.com:9014/axis/services/wb:wsclocks-inbound?wsdl

The document at the url http://scdemo14.infor.com:9014/axis/services/wb:wsclocks-inbound?wsdl
     

未被识别为已知文件   类型。每个错误消息   已知类型可以帮助您修复   问题:    - 来自'XML Schema'的报告是'W3C XML Schema的根元素   应该和它的命名空间   应该   'http://www.w3.org/2001/XMLSchema'。“。    - 来自“DISCO文档”的报告是“URL上的发现文档”   http://scdemo14.infor.com:9014/axis/services/wb:wsclocks-inbound?wsdl   无法找到。'      - 无法识别文档格式。    - 来自'WSDL Document'的报告是'XML文档中存在错误   (242,18)。'。

     
      
  • 未定义命名空间前缀'impl:wb'。
  •   

我用这些参数调用了svcutil:

  

svcutil / n:   *,WB.Client /et:WB.Client.WSResultObject   / o:Client \ WBServices / noConfig   http://scdemo14.infor.com:9014/axis/services/wb:wsclocks-inbound?wsdl

有谁知道我该怎么做才能生成代理?我无法在服务器端更改服务。

1 个答案:

答案 0 :(得分:3)

问题是服务使用绑定的命名约定,这与svcutil不兼容。你可以按照以下方式解决这个问题:

  • 浏览服务的WSDL URL和 将WSDL保存到本地文件。
  • 然后对文件进行以下更改:
  • 从用于wsdl:binding的名称中删除名称空间前缀,即更改

    name="wb:wsclocks-inboundSoapBinding"

    命名= “wsclocks-inboundSoapBinding”

  • 更改wsdl:port属性的绑定属性以匹配,并从name属性的值中删除名称空间前缀,因此它只是 wsclocks-inbound

然后运行svcutil <wsdl-file-path> /o:Client\WBServices /noConfig