2011-11-01 4 views
4

microsoft net wsdl.exe 도구를 사용하여 WSDL을 C# 클래스로 변환하지만이 도구는 WSDL 파일의 다음 부분을 변환 할 수 없습니다. 올바른 방향으로 어떤 포인터가 크게 감사합니다.WSDL을 C# 클래스로 변환

WSDL 입력

<complexType name="Merchant"> 
<sequence> 
    <element name="iId" type="xsd:int" /> 
    <element name="sName" type="xsd:string" /> 
    <element name="sDescription" type="xsd:string" minOccurs="0" /> 
    <element name="aSectors" type="api:ArrayOfMerchantSectors" minOccurs="0" /> 
</sequence> 
</complexType> 

<complexType name="ArrayOfMerchant"> 
<complexContent> 
    <restriction base="soapenc:Array"> 
    <attribute ref="soapenc:arrayType" wsdl:arrayType="api:Merchant[]" /> 
    </restriction> 
</complexContent> 
</complexType> 

<complexType name="MerchantSector"> 
<sequence> 
    <element name="iSectorId" type="xsd:int" /> 
    <element name="sSectorName" type="xsd:string" /> 
</sequence> 
</complexType> 

<complexType name="ArrayOfMerchantSectors"> 
<complexContent> 
    <restriction base="soapenc:Array"> 
    <attribute ref="soapenc:arrayType" wsdl:arrayType="api:MerchantSector[]" /> 
    </restriction> 
</complexContent> 
</complexType> 

C# 1 출력 ????? 내가 좋아하는 것

/// <remarks/> 
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] 
[System.SerializableAttribute()] 
[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://api.someexampledomain.com/")] 
public partial class ArrayOfMerchant : Array 
{ 
} 

/// <remarks/> 
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] 
[System.SerializableAttribute()] 
[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://api.someexampledomain.com/")] 
public partial class ArrayOfMerchantSectors : Array 
{ 
} 

클래스 '상인'과 'ArrayOfMerchant'을 정의하는 방법을 알고 있습니다.

감사합니다.

+4

당신이 가지고있는 특정 문제는 무엇인가는 svcutil는 complexContent 태그 내부에 제한을 지원하지 않습니다? 또한 WSDL.EXE는 레거시 기술이라는 사실을 알고 있습니까? svcutil.exe를 사용하거나 .NET 2.0에 문제가 없다면 "서비스 참조 추가"를 사용해야합니다. –

+1

저는 출발점으로 다음 URL을 사용하여 다른 접근 방식을 취하고 있습니다. http://stackoverflow.com/questions/4791794/c-sharp-client-send-soap-request-and-get-results. 이 질문을 끝내는 가장 좋은 방법은 확실치 않습니다. – Steven

답변

21

WSDL을 얻었 으면 C# 프록시 클래스를 만드는 것이 좋습니다.

아래에 언급 된 방법 중 하나가이 방법입니다. WSDL 데이터가 URL을 통해 공개되지 않는 경우. ": \ MerchantService.wsdl D"를

svcutil.exe D:\MerchantService.wsdl /t:code /l:c# /o:"D:\MerchantService.cs" /n:*,NamespaceName 

에 refrence : 먼저 말 파일에 사용 가능한 WSDL 데이터를 저장 http://msdn.microsoft.com/en-us/library/aa347733.aspx

+1

C# 출력 표시는 wsdl.exe에 의해 생성되지만 또는 에 대해서는 아무 것도 생성되지 않습니다. 결과적으로 arrMerchant [0] .iId에 의해 서비스에서 반환 된 데이터에 액세스 할 수 없습니다. – Steven

+0

@Steven svcutil.exe를 사용해 보았고 복합 유형이 생성되는지 확인 했습니까? –

+1

svcutil.exe는 불행히도 같은 문제를 일으켰습니다. 더 자세히 살펴보면 사용되는 WSDL이 .NET에서 문제를 일으키는 것으로 알려져 있으므로 다음 URL을 시작점으로 사용하는 다른 접근 방식을 취했다. http://stackoverflow.com/questions/4791794/c- 날카로운 클라이언트 - send-soap-request-and-get-results. 이 질문을 끝내는 가장 좋은 방법은 확실치 않습니다. – Steven

관련 문제