Ich habe mehrere Serviceverträge über WCF ausgesetzt, die mehrere Datenverträge verwenden. Der Dienst soll von Adobe Flex genutzt werden. Ich bin auf viele Probleme gestoßen, die Flex veranlassen, die WSDL zu verbrauchen, die vom Bediener produziert wird. Ich habe die Prozedur here verwendet, um die WSDL in eine einzige Datei zu komprimieren (ich habe FlatWsdl und nicht WcfExtras verwendet, wenn es darauf ankommt).WCF: Sollen alle Datenkontrakte denselben Namespace verwenden?
Jetzt eine Reihe von Fehlern immer ich bin, wenn VS2010 eigenes wsdl.exe Tool meiner Metadaten zu extrahieren. Genauer gesagt, erhalte ich folgende Fehler:
1) Schema validation warning: Schema item 'complexType' named
'ArrayOfKeyValueOfSomeKeySomeValuep1alXzIb' from namespace
'http://schemas.microsoft.com/2003/10/Serialization/Arrays' is invalid.
Namespace 'http://My/Wcf/Namespace' is not available to be referenced
in this schema.
2) Schema validation warning: Schema item 'complexType' named 'MyComplexType'
from namespace 'http://My/Wcf/Namespace' is invalid. Namespace
'http://schemas.datacontract.org/2004/07/My.Real.Namespace' is not available
to be referenced in this schema.
nun das Wörterbuch („ArrayOfKeyValueOf ...“) Typ anscheinend in einem externen Schema definiert ist, die nicht durch meine WSDL importiert wird. Bitte beachten Sie, dass SomeKey und SomeValue einen Datenkontrakt-Namespace von My/Wcf/Namespace haben.
Wie bei MyComplexType ist die seltsame Sache, dass, wenn ich seinen Datacontract-Namespace in denselben Namespace ändern, der von meinen Diensten, Servern und Bindungen verwendet wird, dann geht der Fehler (2) weg. Ich kann nicht herausfinden warum.
Was kocht bitte ich auf zwei Fragen nach unten:
1) Wie kann ich eine Import-Direktive von einem externen Schema meiner WSDL hinzufügen? Ich sah online einige Lösungen, die das Schreiben einer Wrapper-Klasse um die Container vorschlugen. Dies möchte ich wirklich vermeiden.
2) Muss ich wirklich alle meine Datacontracts in einem einzigen Namensraum setzen? Ich habe keinen technischen Einwand dagegen, es zu tun, aber es wird sehr mühsam sein, den Namensraum aller Datenverträge zu ändern. Vielleicht gibt es einen automatisierten Weg, dies zu erreichen?
TIA!
Dies wird Ihre Frage nicht beantworten, aber wenn diese Dienste nur für den Verbrauch mit Adobe Flex konzipiert sind, würde ich dringend empfehlen, von WebServices zu wechseln und zu einem AMF-Protokoll mit WebORB oder FlourineFX zu wechseln. Haben Sie darüber hinaus ein Tool wie ServiceCapture verwendet, um herauszufinden, welche Daten hin und her gesendet werden? Was ist der youf Flex-Code für die Nutzung der Dienste? – JeffryHouser
Ich nehme an, das ist ein Weg, aber es wird ein bisschen ein Re-Design sein. Sie sehen, die Services sollten ursprünglich mit C# konsumiert werden, und erst kürzlich haben wir den Umstieg auf Flex vorgenommen.Außerdem möchten wir unsere Dienste in einer standardisierten Weise offen legen, damit Drittentwickler mit ihnen interagieren können. – telewin
Ich habe kein Capturing-Tool verwendet. Was erwartest du dort zu sehen? Ich weiß, wie die WSDL aussieht, und wsdl.exe behauptet, es sei kaputt. Glauben Sie, dass durch das Schnüffeln des Drahtes weitere Erkenntnisse gewonnen werden können? Wie wir die Services in flex konsumieren: Wir wollten die "Webservice Introspection" -Funktion von Flex nutzen. Mit anderen Worten - wir wollen die Dienste als einfache Webdienste nutzen. – telewin