0

クライアント側のすべての機能を処理し、WCF アプリケーション (IIS 7 で提供される) のキャッシュを行う (手動でコーディングされた) WCF プロキシ レイヤー (ServiceReference ではない) があります。たとえば、2 つのデスクトップ クライアントを実行できます。それぞれに独自のプロキシがあり、キャッシュされたオブジェクト (一部は静的またはシングルトン) は独立して機能します。もちろん、各プロキシは独自のプロセスで実行されるためです。

今、私は asp.net MVC Web サイト (私がよく知っているテクノロジではありません) を持っていますが、これと同じ動作が必要です。2 つの異なるクライアントが Web サーバーに接続するとき、プロキシの 2 つの異なるインスタンスが必要です。これはasp.netセッションと関係があると思いますが、asp.netセッションとプロキシインスタンスを接続するために次にどこに行くべきかわかりません。箱から出してこれを行う方法はありますか?

別の言い方をすれば、asp.net の下の IIS サーバーで WCF プロキシをクライアントとして使用し、それをサーバーとして扱わないようにするにはどうすればよいですか?

4

1 に答える 1

0

プロキシがインスタンスになるようにコードをリファクタリングできると仮定すると、次のようなものを使用して ASP.NET アプリケーションでプロキシにアクセスできます。

public class WcfProxy
{
    private WcfProxy(){}

    private static object _locker = new object();

    public static WcfProxy Instance
    {
        get
        {
            if (HttpContext.Current.Session != null)
            {
                if (HttpContext.Current.Session["ProxyInstance"] == null)
                {
                    lock (_locker)
                    {
                        if (HttpContext.Current.Session["ProxyInstance"] == null)
                        {
                            HttpContext.Current.Session["ProxyInstance"] = new WcfProxy();
                        }
                    }
                }
                return (WcfProxy) HttpContext.Current.Session["ProxyInstance"];
            }
        }
    }

    public void OpenChannel(){}
}

これはロックを省略していることに注意してください。使用法:

WcfProxy.Instance.OpenChannel();
于 2012-12-12T19:56:19.700 に答える