简体   繁体   English

在WCF和Biztalk中从WSDL导入键/值complexType定义

[英]Importing key/value complexType definition from WSDL in WCF and Biztalk

I've been struggling with this for days without any idea in how to solve it. 数天来我一直在为此苦苦挣扎,却不知道如何解决它。 Basically I have the following WSDL service definition: 基本上,我具有以下WSDL服务定义:

<?xml version='1.0' encoding='UTF-8'?><!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is Metro/2.2.0-1 (tags/2.2.0u1-7139; 2012-06-02T10:55:19+0000) JAXWS-RI/2.2.6-2 JAXWS/2.2 svn-revision#unknown. --><!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is Metro/2.2.0-1 (tags/2.2.0u1-7139; 2012-06-02T10:55:19+0000) JAXWS-RI/2.2.6-2 JAXWS/2.2 svn-revision#unknown. --><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://sample.org/schemas/2012" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://sample.org/schemas/2012" name="SampleServiceImplService">
<types>
<xsd:schema>
<xsd:import namespace="http://sample.org/schemas/2012" schemaLocation="http://localhost:8080/sampleServices_war_exploded/sample?xsd=1"/>
</xsd:schema>
</types>
<message name="ExecuteSample">
<part name="parameters" element="tns:ExecuteSample"/>
</message>
<message name="ExecuteSampleResponse">
<part name="parameters" element="tns:ExecuteSampleResponse"/>
</message>
<message name="SampleException">
<part name="fault" element="tns:SampleException"/>
</message>
<portType name="SampleService">
<operation name="ExecuteSample">
<input wsam:Action="http://sample.org/schemas/2012/SampleService/ExecuteSampleRequest" message="tns:ExecuteSample"/>
<output wsam:Action="http://sample.org/schemas/2012/SampleService/ExecuteSampleResponse" message="tns:ExecuteSampleResponse"/>
<fault message="tns:SampleException" name="SampleException" wsam:Action="http://sample.org/schemas/2012/SampleService/ExecuteSample/Fault/SampleException"/>
</operation>
</portType>
<binding name="SampleServiceImplPortBinding" type="tns:SampleService">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
<operation name="ExecuteSample">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
<fault name="SampleException">
<soap:fault name="SampleException" use="literal"/>
</fault>
</operation>
</binding>
<service name="SampleServiceImplService">
<port name="SampleServiceImplPort" binding="tns:SampleServiceImplPortBinding">
<soap:address location="http://localhost:8080/sampleServices_war_exploded/sample"/>
</port>
</service>
</definitions>

With the following accompanied XSD file definition: 带有以下随附的XSD文件定义:

<?xml version='1.0' encoding='UTF-8'?><!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is Metro/2.2.0-1 (tags/2.2.0u1-7139; 2012-06-02T10:55:19+0000) JAXWS-RI/2.2.6-2 JAXWS/2.2 svn-revision#unknown. --><xs:schema xmlns:tns="http://sample.org/schemas/2012" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0" targetNamespace="http://sample.org/schemas/2012">
<xs:element name="ExecuteSample" type="tns:ExecuteSample"/>
<xs:element name="ExecuteSampleResponse" type="tns:ExecuteSampleResponse"/>
<xs:element name="SampleException" nillable="true" type="tns:faultInfo"/>
<xs:complexType name="ExecuteSample">
<xs:sequence>
<xs:element name="name" type="xs:string" minOccurs="0"/>
<xs:element name="values">
<xs:complexType>
<xs:sequence>
<xs:element name="entry" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="key" minOccurs="0" type="xs:string"/>
<xs:element name="value" minOccurs="0" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ExecuteSampleResponse">
<xs:sequence/>
</xs:complexType>
<xs:complexType name="faultInfo">
<xs:sequence/>
</xs:complexType>
</xs:schema>

Ok, the documents looks fine, we define a complexType named ExecuteSample (the request type) that contains two members, name and values, the last one is another complex type with an entry named 'entry' with key and values. 好的,文档看起来不错,我们定义了一个名为ExecuteSample(请求类型)的complexType,其中包含两个成员,即名称和值,最后一个是另一个复杂类型,其条目名为“ entry”,具有键和值。

This looks like a dictionary, and in fact is a dictionary. 这看起来像一本字典,实际上是一本字典。 It even uses the 'suggested' way of exposing dictionaries with the only difference that is wrapped inside an 'entry' parameter. 它甚至使用“建议”的方式来公开字典,唯一的不同之处在于包裹在“ entry”参数中。

Well, guess what, WCF svcutil neither biztalk can recognize the WSDL. 好吧,你猜怎么着,biztalk不能识别WSDL的WCF svcutil。 SVCUtil and Visual Studio fails with a very stupid error telling me something like: SVCUtil和Visual Studio失败,出现一个非常愚蠢的错误,告诉我类似以下内容:

Warning 1   Custom tool warning: Cannot import wsdl:portType
Detail: An exception was thrown while running a WSDL import extension: System.ServiceModel.Description.DataContractSerializerMessageContractImporter
Error: Object reference not set to an instance of an object.
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://sample.org/schemas/2012']/wsdl:portType[@name='SampleService']   C:\src\biztalk\ConsoleApplication6\ConsoleApplication6\Service References\ServiceReference1\Reference.svcmap    1   1   ConsoleApplication6

The biztalk WSDL import wizard fails without any error message, just telling me that something was wrong... biztalk WSDL导入向导失败,没有任何错误消息,只是告诉我有些问题...

I've tried everything and looked everything possible in the web, nothing really pops.. I'm desperate and have no idea what the hell is happening, everything looks fine but is not working... 我已经尝试了一切,并在网络上查找了所有可能的东西,没有真正冒出来的东西。.我很拼命,也不知道到底发生了什么,一切看起来都很好,但是没有用...

Weird... any idea? 很奇怪...知道吗?

You need to add targetNamespace to the schema tag in the types section of the wsdl. 您需要在wsdl的类型部分中将targetNamespace添加到模式标记。

<types>
    <xsd:schema targetNamepace="http://blah.org">
    ...
    </xsd:schema>
</types>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM