0

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

现在,我有一个 asp.net MVC 网站(不是我熟悉的技术),我想要同样的行为:当两个不同的客户端连接到 Web 服务器时,我想要两个不同的代理实例。我假设这与 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 回答