我想使用VB .Net动态调用Web服务。 在Visual Studio中将其作为Web引用添加时,我可以使用Web服务,因此Web服务端很好。
我正在关注这个article,这有点成功,也就是说,它适用于我尝试的一些但不是所有服务。如果失败,它会抛出:
System.InvalidOperationException: Unable to Import Binding from Namespace
...
Unabled to find 'http://service/:helloWorld'
这引导我进入Bug。我不太确定它是否真的相关,因为WSDL中没有<inlcude>
个元素:
<?xml version='1.0' encoding='UTF-8'?>
<definitions xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://service/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://service/" name="simple">
<types>
<xsd:schema>
<xsd:import namespace="http://service/" schemaLocation="http://localhost:8080/simple/simple?xsd=1"/>
</xsd:schema>
</types>
<message name="helloWorld">
<part name="parameters" element="tns:helloWorld"/>
</message>
<message name="helloWorldResponse">
<part name="parameters" element="tns:helloWorldResponse"/>
</message>
<portType name="simple">
<operation name="helloWorld">
<input wsam:Action="http://service/simple/helloWorldRequest" message="tns:helloWorld"/>
<output wsam:Action="http://service/simple/helloWorldResponse" message="tns:helloWorldResponse"/>
</operation>
</portType>
<binding name="simplePortBinding" type="tns:simple">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
<operation name="helloWorld">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="simple">
<port name="simplePort" binding="tns:simplePortBinding">
<soap:address location="http://localhost:8080/simple/simple"/>
</port>
</service>
</definitions>
导入的xsd如下所示:
<xs:schema version="1.0" targetNamespace="http://service/"><xs:element name="helloWorld" type="tns:helloWorld"/>
<xs:element name="helloWorldResponse" type="tns:helloWorldResponse"/>
<xs:complexType name="helloWorld">
<xs:sequence/>
</xs:complexType>
<xs:complexType name="helloWorldResponse">
<xs:sequence>
<xs:element name="return" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
两者都是从部署在glassfish上的JAX-WS Web服务自动生成的。
所以问题是:是什么导致了这个错误,是否有一个解决方法,不涉及更改Web服务?