Ich versuche, eine WCF-Anwendung zu erstellen, die auf Anforderungen von einem Lieferantensystem wartet. Der Lieferant hat mir eine WSDL zur Verfügung gestellt, also muss ich einen Dienst erstellen und ihnen seinen Endpunkt offen legen.WCF-Dienst + SvcUtil generiert unerwartete Objektstruktur
Ich habe SvcUtil.exe verwendet, um die C# -Klassen zu generieren, aber es gibt ziemlich seltsam aussehende Typen aus.
Dies ist ein Ausschnitt aus der WSDL, die mir gegeben wurde:
<?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" />
....
Der Befehl, den ich laufen ist einfach
svcutil.exe file_name.wsdl
Ich würde erwarten, dass dies eine Struktur wie folgt erstellt:
class Submit { ... }
class Incident { ... }
class ConfigurationItem { ... }
So, wenn es serialisiert ist, bekomme ich etwas wie:
<Submit>
<Incident>
<TransactionId>12345</TransactionId>
<TransactionType>12345</TransactionType>
<TransactionSubType>12345</TransactionSubType>
<ConfigurationItem>
<AssetTag>xyz</AssetTag>
<Name>name</Name>
</ConfigurationItem>
</Incident>
</Submit>
Allerdings gibt die Ausgabe von SvcUtil.exe mir folgendes:
class SubmitIncident { ... }
class SubmitIncidentConfigurationItem { ... }
Es ist scheint auf einen Haufen legen die Reichen und die Ereignisobjekte in ein, und auch prepends es SubmitIncident 'auf jede die verschachtelten Elemente. Also, wenn die Serialisierung ich diese:
<SubmitIncident>
<TransactionId>...</TransactionId>
<TransactionType>...</TransactionType>
<TransactionSubType>...</TransactionSubType>
<SubmitIncidentConfigurationItem>
<AssetTag>...</AssetTag>
<Name>...</Name>
</SubmitIncidentConfigurationItem>
</SubmitIncident>
Dies verursacht Probleme sowohl mit dem Lieferanten (mein Dienst nicht ihre WSDL passen, so dass sie nicht mit mir reden können) und mit Weiterverarbeitung ich in der Anwendung täte . Kann mir jemand helfen, zu verstehen, warum das passiert, wie man es stoppt und SvcUtil zur korrekten Ausgabe bringt?