2012-11-05 4 views
4

나는 이것을 해결하는 방법을 모르는 채 며칠 동안 고민하고 있습니다. 다음과 함께 XSD 파일 정의와WCF 및 BizTalk의 WSDL에서 키/값 complexType 정의 가져 오기

<?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> 

: 기본적으로 나는 다음과 같은 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. --><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> 

좋아, 문서가 잘 보이는, 우리가 ExecuteSample (요청 유형)라는 이름의 복합 타입을 정의를 그 두 멤버, 이름 및 값을 포함하며, 마지막 멤버는 키와 값이있는 'entry'라는 항목이있는 또 다른 복합 유형입니다.

이것은 사전처럼 보이며 사실 사전입니다. 그것은 심지어 'entry'매개 변수 안에 싸여있는 유일한 차이점을 가지고 사전을 노출시키는 '제안 된'방법을 사용합니다.

WCF는 WSDL을 인식 할 수 없으므로 WCF를 사용하지 마십시오.

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 

는 BizTalk의 WSDL 가져 오기 마법사가 뭔가 잘못이라고 말해, 오류 메시지없이 실패 ...

나는했습니다는 svcutil 및 Visual Studio 나에게 뭔가를 말하고 아주 바보 같은 오류와 함께 실패 모든 것을 시도하고 웹에서 가능한 모든 것을 보았습니다. 정말 펑하는 소리가 아니 었습니다. 필사적이고 도대체 무슨 일이 벌어지고 있는지 전혀 모르는 채로, 모든 것이 정상적으로 보이지만 작동하지 않습니다 ...

이상한 생각 이라니?

답변

2

wsdl의 유형 섹션에있는 스키마 태그에 targetNamespace를 추가해야합니다.

<types> 
    <xsd:schema targetNamepace="http://blah.org"> 
    ... 
    </xsd:schema> 
</types> 
관련 문제