2017-12-27 10 views
2

Ich habe ein Xamarin.Forms-Projekt mit .netstandard 2.0 als PCL-Projekt erstellt. Ich versuche WCF-Dienste in diesem Projekt zu verwenden. Ich habe den verbundenen Dienst für den WCF-Dienst hinzugefügt. Wenn ich versuche, jede Methode in dem Dienst zur Verfügung gestellt zu nennen, gibt es die Fehler wie folgt:Wie werden WCF-Dienste in .netstandard mit dem Xamarin.Forms-Projekt verwendet?

System.ServiceModel.FaultException`1[[System.ServiceModel.ExceptionDetail, System.ServiceModel, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]: Error in deserializing body of request message for operation 'GetData'. OperationFormatter encountered an invalid Message body. Expected to find node type 'Element' with name 'GetData' and namespace ' http://tempuri.org/ '. Found node type 'Element' with name 'GetDataAsync' and namespace ' http://tempuri.org/ '

Ich habe auch die .netstandard Version auf eine ältere Version zu ändern versucht, aber es gibt die gleichen Fehler.

+0

Der Fehler schlägt die Form des Körpers nicht richtig ist, eher als eine Methode nicht implementiert. Sind die Modelle korrekt? – Neil

+0

@Neil ja die Modelle sind korrekt. Tatsächlich kann die Methode GetData das Problem mit den Proxy-Klassen haben, die vom WCF-Dienstanbieter in Visual Studio generiert wurden. – vishgarg

+0

Hallo! Weiß jemand, ob Xamarin mit Task-basierten asynchronen WCF-Proxy-Methoden kompatibel ist? Danke im Voraus. – Ignacio

Antwort

2

Im Moment Xamarin Anwendungen sind nicht mit den Aufgabe-Basis asynchronen WCF Proxy Verfahren kompatibel, die die WCF Web Service Reference verbunden Dienstleister für .NET-Standard-Projekte erzeugt (bugzilla.xamarin.com Bug 51959).

Eine Möglichkeit, eine ältere, kompatible Art von WCF-Proxy-Methoden zu erzeugen, ist SvcUtil.exe mit den /async und /tcv:Version35 Schaltern in einem Developer Command Prompt zu laufen. Dadurch werden synchrone Proxy-Methoden, APM-Callback-Proxy-Methoden (Start/End-Stil, asynchrones Programmiermodell) und ereignisbasierte Proxy-Methoden generiert, die alle mit Xamarin-Apps kompatibel sind.

. (Anmerkung: Wenn Sie die /async Schalter auslassen, SvcUtil.exe wird die neueren, inkompatible Aufgaben basierten Proxy-Methoden erzeugen)

+0

Ich denke, es gibt keine Möglichkeit, die Proxy-Klassen mit der alten Option als Visual Studio 2017 zu generieren. Svcutil.exe generiert wieder die async/away-style-Proxy-Methoden – vishgarg

+0

Hmm. Sie können vielleicht auch versuchen, die Option '/ tcv: Version35' explizit zu übergeben. Laut der [Dokumentation] (https://docs.microsoft.com/dotnet/framework/wcf/servicemodel-metadata-utility-tool-svcutil-exe): "Bei Verwendung von'/tcv: Version35' mit dem '/ async 'switch, es werden sowohl ereignisbasierte als auch Callback/Delegate-basierte asynchrone Methoden generiert." In meinen Schnelltests mit 'C: \ Programme (x86) \ Microsoft SDKs \ Windows \ v10.0A \ bin \ NETFX 4.6.1 Tools \ SvcUtil.exe' habe ich die gewünschten Callback- und Event-basierten Methoden. –

+1

Ah ha. Es scheint, dass, wenn Sie das '/ async'-Flag weglassen, es nun neben den synchronen Methoden standardmäßig die aufgabenbasierten Methoden enthält. Ich werde meine Antwort ein wenig bearbeiten, um dies zu berücksichtigen und das '/ tcv: Version35'-Flag zu erwähnen, da dies erforderlich ist, um die ereignisbasierten Methoden zu erhalten. –

Verwandte Themen