如何使我的WCF代理asp.net会话依赖?

时间:2012-12-12 17:25:53

标签: asp.net-mvc wcf iis

我有一个(手工编码的)WCF代理层(即不是ServiceReference),它处理所有客户端功能,并为WCF应用程序(在IIS 7下提供)进行一些缓存。我可以运行两个桌面客户端,每个桌面客户端都有自己的代理,并且它们的缓存对象(其中一些是静态或单一的)将独立运行,因为每个代理当然都在自己的进程中运行。

现在,我有一个asp.net MVC网站(不是我熟悉的技术),我想要同样的行为:当两个不同的客户端连接到Web服务器时,我想要两个不同的代理实例。我假设这与asp.net会话有关,但不知道接下来要连接asp.net会话和代理实例。有没有办法开箱即用?

换句话说,如何在asp.net下创建IIS服务器使用WCF代理作为客户端,而不是将其视为服务器?

1 个答案:

答案 0 :(得分: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();