0

私の WCF Web サービスには、次のインターフェイスがあります。

[ServiceContract]
public interface ITestService
{
    [OperationContract]
    void TestMethod(out int param1, out int param2);
}

クライアント側でサービス参照を追加すると、生成されたクライアント メソッドが元の署名と正しく一致せず、outパラメーターの 1 つがメソッドの戻り値としてマップされます。私はそれをこのように呼ばなければなりません:

using (var client = new TestServiceClient())
{
    int param2;
    int param1 = client.TestMethod(out param2);
}

元のメソッド署名に忠実なプロキシを「強制」して生成する方法はありますか?

4

3 に答える 3

2

out パラメータを使用する代わりに、2 つのプロパティを持つデータ構造を返すようにサービスを変更し、操作から返すことを検討します。

于 2013-05-02T19:56:25.053 に答える
1

これはプロキシ生成コードの制限だと思います。これを変更するには、生成されたプロキシ コードをクライアントで編集する必要があります。

于 2013-05-02T19:53:58.857 に答える
0

技術的には忠実です。Reference.cs を詳しく調べると、プロキシがサービスを呼び出すときの呼び出しが同じであることがわかります。ただし、サービスを呼び出すプロキシまたは「ラッパー」は、サービス呼び出しを別の方法で「ラップ」することにしました。

プロキシ自体に同じ署名を保持させる唯一の方法は、自分で作成することです。これは、DLL をリフレクトするときに発生する問題とまったく同じです。確かにそれを反映して「ソースコード」を取得できますが、機能は同じですが、反映されたコードは元のソースとは異なります。

于 2013-05-02T20:18:27.087 に答える