2016-10-06 7 views
0

私は1つの入力と2つの出力という3つのパラメータを持つメソッドを持つWCFサービスを持っています。例えば。WCFサービスを呼び出すときにパラメータを元に戻す必要があるのはなぜですか?

Foo(input, out1, out2) 

は私がサービスを呼び出すために行くとき、Visual Studioは、適切なパラメータを認識しません、しかし、私のクライアントコードでサービス参照の罰金を追加します。私はサービスを

と呼ぶ必要があります
Foo(out1, out2, input) 

なぜですか?私は、サービス参照の参照ファイル内でその順序が逆転しているのを見ることができますが、私が注文を変更すると、Visual Studioは私に正しい順序ではないというエラーを出します。これは正常な動作ですか?逆のパラメータを使用してサービスを呼び出すだけでいいですか?

答えて

2

...私はサービスを呼び出すために行くとき、Visual Studioが パラメータを認識しませんが正しく

あなたが持っている問題は仕様です。

サービスがWSDLメタデータをコンシューマに公開すると、サービス操作シグネチャが元の形式で維持されるサービス定義はありません。

代わりに、入力パラメータと出力パラメータは別々のコレクションで宣言されています。

ここでは、サービス参照の追加ツールを使用して、メタデータからコンシューマの元の操作シグネチャを再構築しようとしていますが、この場合はできません。元の操作署名はこの時点で失われています。それで、出力パラメータコレクションを最初に処理した操作を再構築し、次に入力パラメータを再構築します。

  1. は、ご利用のサービスオペレーション定義で出力パラメータを使用しない:

    これは離れて行くようにする唯一の方法は、することです。これはとにかくoutput parameters are a code quality flagとして推奨され、可能であれば避けるべきです。

  2. サービスからメタデータを公開しないでください。サービス参照を使用する代わりにWCF channelを使用して、実際のサービス定義タイプを使用して直接サービスを呼び出すことができます。これは、一般に、WCFでサービスを呼び出すための優れたメソッドとみなされます。

あなたは何もすることはできません。消費者は依然としてサービス運用の権利を呼び出すことができますか?

関連する問題