リフレクションによる.net wcf restサービスの使用
-
06-07-2019 - |
質問
可能であれば、リフレクションを介してwcf restサービスを使用しようとしています。以下のコードを見てください:
public static object WCFRestClient<T>(string method, string uri, params object[] args)
{
object o;
object ret;
using (ChannelFactory<T> cf = new ChannelFactory<T>(new WebHttpBinding(), uri))
{
T contract = cf.CreateChannel();
ret = contract.GetType().GetMethod(method).Invoke(o, args);
}
return ret;
}
ご覧のとおり、実行時にTを使用する一般的なメソッドです...私の問題は、上記で作成しているチャネルオブジェクトを本当に反映できるかどうかわかりません。オブジェクトインスタンスを作成するときに問題が始まります...インターフェイスからオブジェクトインスタンスを作成できないため...
これを達成する他の方法があるかどうかについても喜んで聞きますか?ただし、可能な場合はチャネルメカニズムを使用します。
解決
一般に、すべての操作に対してChannelFactory
を作成すると費用がかかります。可能であればそれを避けるべきです。 using
パターンは、WCFのICommunicationObject
型に対しても問題があります。これは、Dispose()
が一般的にブロッキング/例外スロー呼び出しであるClose()
に対応するためです。代わりにTimeoutException
を明示的に呼び出して、CommunicationException
およびChannelFactory<T>.CreateChannel
を処理します。
それ以外は、あなたのアプローチはうまくいくでしょう。 T
を使用すると、タイプo
の透過プロキシオブジェクトが作成され、必要に応じてリフレクション経由で呼び出すことができます。そのため、コントラクトインターフェイスからオブジェクトを作成することを心配する必要はありません-WCFは既にそれを行っています。
コードサンプルで、必ずcontract
を<=>に置き換えてください。期待どおりの結果が得られます。
所属していません StackOverflow