1

アプリケーションで WCF サービスを使用しています。私の計画は、次のようなデザイン サービス契約です。

[ServiceContract]
public interface IService
{

    [OperationContract]
    object ServiceCall(string typeName, string methodName,  object[] methodParameters);
}

クライアント側から指定されたパラメーターで ServiceCall メソッドを呼び出します。

次に、サーバー側でメソッド情報を作成し、指定されたメソッドを呼び出して、クライアントに応答を返します。このようにして、単一の方法ですべてのリモート CAL を解決できます。WCF の既知の型の問題のため、そのような service.return 型とメソッド パラメーター オブジェクトを作成できません [] methodParameters はオブジェクトの型にすることはできません

どうすればこの問題を解決できますか? または、代わりに何ができますか?

4

1 に答える 1

1

明示的なデータおよびサービス コントラクトを定義することが望ましい理由は次のとおりです。

  • これにより、サービスが何を期待しているかが消費者に明確になります。それがなければ、ドキュメントの要件が増加します
  • サービスをより見つけやすくし、利用しやすくします
  • WCF がメッセージの型チェックを提供できるようにします
  • オブジェクトがどのように (デ) シリアル化されるかを詳細に制御できます

ただし、1 つの操作ですべてを支配したい場合は、次のような方法を試すことができます。

[ServiceContract]
public interface IService
{

    [OperationContract]
    MyResponse ServiceCall(IMyRequest request);
}

IMyRequest は次のようになります。

public interface IMyRequest{
    string TypeName {get; set}
    string MethodName {get; set;}
}

次に、各呼び出しに必要なパラメーター オブジェクトで展開し、KnownTypes で装飾します。あなたは本当にそれを回避することはできません. WCF では「オブジェクト」だけを指定することは許可されていないため (双方が何について話しているかを知る必要があるため、そうすべきではありません)、少なくとも要求オブジェクトを明示的に定義する必要があります。単一の OperationContract メソッドを使用できますが、上で述べたように、明示的な操作を使用した方がよいと思います。

于 2012-10-28T01:20:32.270 に答える