我有一个(手工编码的)WCF代理层(即不是ServiceReference),它处理所有客户端功能,并为WCF应用程序(在IIS 7下提供)进行一些缓存。我可以运行两个桌面客户端,每个桌面客户端都有自己的代理,并且它们的缓存对象(其中一些是静态或单一的)将独立运行,因为每个代理当然都在自己的进程中运行。
现在,我有一个asp.net MVC网站(不是我熟悉的技术),我想要同样的行为:当两个不同的客户端连接到Web服务器时,我想要两个不同的代理实例。我假设这与asp.net会话有关,但不知道接下来要连接asp.net会话和代理实例。有没有办法开箱即用?
换句话说,如何在asp.net下创建IIS服务器使用WCF代理作为客户端,而不是将其视为服务器?
答案 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();