2017-12-27 28 views
2

PCLプロジェクトとして.netstandard 2.0を使用してXamarin.Formsプロジェクトを作成しました。私はそのプロジェクトでWCFサービスを利用しようとしています。 WCFサービスの接続サービスを追加しました。私はサービスで提供される任意のメソッドを呼び出すためにしようとしているとき、それは以下のようにエラーを与える:.netstandardでXamarin.FormsプロジェクトでWCFサービスを使用するにはどうすればいいですか?

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/ '

私はまた、古いバージョンに.netstandardバージョンを変更しようとしたが、それは同じエラーを与えます。

+0

エラーが体の形状が正しくない、というよりない実装方法であることを示唆しています。モデルは正しいですか? – Neil

+0

@Neilはいモデルが正しいです。実際にGetDataメソッドには、Visual StudioのWCFサービスプロバイダによって生成されたプロキシクラスに問題がある可能性があります。 – vishgarg

+0

こんにちは! Xamarinがタスクベースの非同期WCFプロキシメソッドと互換性があるかどうかは誰にも分かりますか?ありがとうございました。 – Ignacio

答えて

2

現時点では、Xamarinアプリケーションは、WCF Web Service Reference接続サービスプロバイダが.NET標準プロジェクト(bugzilla.xamarin.com Bug 51959)用に生成するタスクベースの非同期WCFプロキシメソッドと互換性がありません。 WCFのプロキシメソッドの古い、互換性のあるスタイルを生成する

一つの方法は、Developer Command Prompt/async/tcv:Version35スイッチとSvcUtil.exeを実行することです。同期プロキシメソッド、Begin/Endスタイルの非同期プログラミングモデル(APM)コールバックプロキシメソッド、およびイベントベースのプロキシメソッドが生成されます。これらのメソッドはすべてXamarinアプリケーションと互換性があります。

(注:あなたが/asyncスイッチを省略した場合、SvcUtil.exeが新しい、互換性のないタスクベースのプロキシメソッドを生成します)

+0

私は、Visual Studio 2017として古いオプションを使用してプロキシクラスを生成するオプションがないと思うsvcutil.exeは、async/awaitスタイルのプロキシメソッドを再度生成します – vishgarg

+0

Hmm。おそらく明示的に '/ tcv:Version35'オプションを渡すこともできます。 [documentation](https://docs.microsoft.com/dotnet/framework/wcf/servicemodel-metadata-utility-tool-svcutil-exe)によると: ''/tcv:Version35'を '/ async 'switch、イベントベースとコールバック/デリゲートベースの両方の非同期メソッドが生成されます。 'C:¥Program Files(x86)¥Microsoft SDKs¥Windows¥v10.0A¥bin¥NETFX 4.6.1 Tools¥SvcUtil.exe'のクイックテストでは、コールバックとイベントベースのメソッドを用意しました。 –

+1

ああ。 '/ async'フラグを省略すると、デフォルトでタスクベースのメソッドが同期メソッドとともに追加されているようです。これを説明し、 '/ tcv:Version35'フラグについても、イベントベースのメソッドを取得するために必要なので、私の答えを少し編集します。 –

関連する問題