質問

可能であれば、リフレクションを介して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を<=>に置き換えてください。期待どおりの結果が得られます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top