Sto provando a creare un'applicazione WCF che ascolterà le richieste da un sistema di fornitori. Il fornitore mi ha fornito un WSDL, quindi ho bisogno di creare un servizio ed esporre il suo endpoint ad essi.Servizio WCF + SvcUtil generando una struttura di oggetto inattesa
Ho usato SvcUtil.exe per generare le classi C#, ma emette tipi piuttosto bizzarri.
Si tratta di un frammento del WSDL che è stato dato a me:
<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<wsdl:types>
<s:schema elementFormDefault="qualified">
<s:element name="Submit">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="Incident">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" form="unqualified" name="TransactionId" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" form="unqualified" name="TransactionType" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" form="unqualified" name="TransactionSubType" type="s:string" />
<s:element minOccurs="0" maxOccurs="unbounded" form="unqualified" name="ConfigurationItem">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" form="unqualified" name="AssetTag" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" form="unqualified" name="Name" type="s:string" />
....
Il comando corro è semplicemente
svcutil.exe file_name.wsdl
Mi aspetterei che questo crea una struttura come questa:
class Submit { ... }
class Incident { ... }
class ConfigurationItem { ... }
In modo che quando viene serializzato ottengo qualcosa di simile:
<Submit>
<Incident>
<TransactionId>12345</TransactionId>
<TransactionType>12345</TransactionType>
<TransactionSubType>12345</TransactionSubType>
<ConfigurationItem>
<AssetTag>xyz</AssetTag>
<Name>name</Name>
</ConfigurationItem>
</Incident>
</Submit>
Tuttavia, l'uscita del SvcUtil.exe mi dà il seguente:
class SubmitIncident { ... }
class SubmitIncidentConfigurationItem { ... }
E 'sembra grappolo Submit e l'incidente oggetti in uno, ed inoltre antepone 'SubmitIncident' su ciascuno dei gli elementi nidificati Così, quando la serializzazione ottengo questo:
<SubmitIncident>
<TransactionId>...</TransactionId>
<TransactionType>...</TransactionType>
<TransactionSubType>...</TransactionSubType>
<SubmitIncidentConfigurationItem>
<AssetTag>...</AssetTag>
<Name>...</Name>
</SubmitIncidentConfigurationItem>
</SubmitIncident>
Questo provoca problemi sia con il fornitore (il mio servizio non corrisponde a loro WSDL quindi non possono parlare con me), e con l'elaborazione in poi sto facendo nella domanda . Qualcuno può aiutarmi a capire perché questo sta accadendo, come fermarlo e far sì che SvcUtil sia emesso correttamente.