2011-11-01 6 views
4

Conversion de classes WSDL en classes C# à l'aide de l'outil Microsoft wsdl.exe mais l'outil ne parvient pas à convertir la partie suivante du fichier WSDL. Tout pointeur dans la bonne direction grandement apprécié.Conversion de classes WSDL en classes C#

WSDL entrée

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

/// <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 
{ 
} 

Je voudrais savoir comment définir la classe « marchande » et « ArrayOfMerchant ».

Merci.

+4

Quel est le problème spécifique que vous rencontrez? Aussi, savez-vous que WSDL.EXE est une technologie héritée? Vous devriez utiliser svcutil.exe ou simplement utiliser "Ajouter une référence de service", sauf si vous êtes coincé avec .NET 2.0. –

+1

Je suis en train de faire une approche différente en utilisant l'URL suivante comme point de départ http://stackoverflow.com/questions/4791794/c-sharp-client-send-soap-request-and-get-results. Pas sûr de la meilleure façon de clore cette question. – Steven

Répondre

21

Si vous avez le WSDL avec vous, il est temps de créer la classe proxy C#.

Ci-dessous mentionné est l'un des moyens de le faire. Si vos données WSDL ne sont pas exposées via une URL. d'abord enregistrer les données WSDL disponibles dans un fichier dit "D: \ MerchantService.wsdl"

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

refrence: http://msdn.microsoft.com/en-us/library/aa347733.aspx

+1

L'affichage de sortie C# est généré par wsdl.exe mais rien n'est généré pour ou . Par conséquent, je suis incapable d'accéder aux données renvoyées par le service, par exemple, arrMerchant [0] .iId. – Steven

+0

@Steven Avez-vous essayé d'utiliser svcutil.exe pour voir si votre type complexe est généré? –

+1

svcutil.exe a malheureusement généré les mêmes problèmes. Après avoir examiné les choses plus loin, j'ai découvert que le WSDL utilisé est connu pour causer des problèmes avec. NET, j'ai donc adopté une approche différente en utilisant l'URL suivante comme point de départ http://stackoverflow.com/questions/4791794/c- Sharp-client-send-savon-demande-et-obtenir-résultats. Pas sûr de la meilleure façon de clore cette question. – Steven