我正在努力将.NET应用程序与基于Servlet的Java应用程序Hermes2(H2O)集成。 Java应用程序公开了几个Web服务,我试图在Visual Studio 2008中创建这些Web引用。但是这只会导致一个空代理,并注释错误消息:“CODEGEN:来自命名空间的操作绑定'Request' http://service.ebms.edi.cecid.hku.hk/'被忽略。不支持指定使用类型=文字消息。“。
当我尝试通过.NET中的wsdl.exe实用程序运行WSDL时,我得到以下输出:
Microsoft (R) Web Services Description Language Utility
[Microsoft (R) .NET Framework, Version 2.0.50727.42]
Copyright (C) Microsoft Corporation. All rights reserved.
Warning: This web reference does not conform to WS-I Basic Profile v1.1.
R2204: A document-literal binding in a DESCRIPTION MUST refer, in each of its soapbind:body element(s), only to wsdl:part element(s) that have been defined using the element attribute.
- Part 'messageId' of message 'EbmsRequestMsg' from service description with targetNamespace='http://service.ebms.edi.cecid.hku.hk/'.
- Part 'hasMessage' of message 'EbmsResponseMsg' from service description with targetNamespace='http://service.ebms.edi.cecid.hku.hk/'.
For more details on the WS-I Basic Profile v1.1, see the specification
at http://www.ws-i.org/Profiles/BasicProfile-1.1.html.
Warning: one or more operations were skipped.
Warnings were encountered. Review generated source comments for more details.
Writing file 'C:\Files\Temp\Helsekortet\Hermes\wsdl\EbmsMessageReceiverDownload.cs'.
是否有人知道问题是什么,以及可能如何解决这个问题?我认为Hermes2使用某种常见的Webservices库。是否有任何此类Java库生成无效的WSDL,或者这只是.NET不支持的某些功能?
WSDL如下(我在这里看不到任何附加文件的方式,我没有WSDL的URL。抱歉发布了一个臃肿的问题):
<?xml version="1.0" encoding="utf-8"?>
<definitions
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:s="http://www.w3.org/2001/XMLSchema"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:p="http://service.ebms.edi.cecid.hku.hk/"
targetNamespace="http://service.ebms.edi.cecid.hku.hk/">
<types>
</types>
<message name="EbmsRequestMsg">
<part name="messageId" type="s:string" />
</message>
<message name="EbmsResponseMsg">
<part name="hasMessage" type="s:string" />
</message>
<portType name="EbmsReceiverDownload">
<operation name="Request">
<input message="p:EbmsRequestMsg" />
<output message="p:EbmsResponseMsg" />
</operation>
</portType>
<binding name="EbmsSoapHttpReceiverDownload" type="p:EbmsReceiverDownload">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
<operation name="Request">
<soap:operation soapAction="Ebmsreceiverdownload" style="document" />
<input>
<soap:body use="literal" />
</input>
<output>
<soap:body use="literal" />
</output>
</operation>
</binding>
<service name="EbmsMessageReceiverDownload">
<documentation>Documentation not available.</documentation>
<port name="EbmsReceiverDownload" binding="p:EbmsSoapHttpReceiverDownload">
<soap:address location="http://127.0.0.1:8080/corvus/httpd/ebms/receiver" />
</port>
</service>
</definitions>
希望任何人都可以提供帮助。
答案 0 :(得分:1)
<message name="EbmsRequestMsg">
<part name="messageId" type="s:string" />
</message>
<message name="EbmsResponseMsg">
<part name="hasMessage" type="s:string" />
这些必须引用元素声明而不是原始的简单类型。您需要创建一个包含字符串简单类型的元素包装器。
答案 1 :(得分:1)
我希望有人能提供有关如何解决马丁指出的问题的信息,但没有人这样做: - /
然而,经过几个小时的阅读和尝试,我终于设法将Java应用程序生成的WSDL重写为符合.NET Web服务实现所遵循的标准的东西。
似乎所使用的Java Webservices框架是罪人,但我不知道使用了什么库,因为我不熟悉其中的许多。除了不生成标准符合的WSDL之外,在此应用程序中还有几个其他问题,据我所知,很久以前就解决了这个问题。例如,使用mime“multipart / related”传输二进制数据,但没有引用SOAP xml中的数据。
我认为.NET糟透了......无论如何,这里是重写后产生的WSDL类型和消息部分(因为这些未被修改而忽略了其他部分):
<types>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://service.ebms.edi.cecid.hku.hk/" elementFormDefault="qualified">
<xs:element name="messageId" type="xs:string" />
<xs:element name="hasMessage" type="xs:string" />
</xs:schema>
</types>
<message name="EbmsRequestMsg">
<part name="messageId" element="p:messageId" />
</message>
<message name="EbmsResponseMsg">
<part name="hasMessage" element="p:hasMessage" />
</message>
感谢Martin指出我正确的方向: - )