在ASP.NET中不能使用WCF NetPeerTcpBinding?

时间:2010-02-22 20:44:07

标签: c# asp.net wcf p2p web-farm

我为Web场编写应用程序,我想在服务器应用程序之间创建一个简单的对等网络,以便它们可以相互传递消息。例如,在删除缓存项时进行协调,或者增加共享计数器以获得关键统计信息的更好共享视图。

但显然这是不可能的。我在控制台应用程序中使用了点对点代码,但是当我将代码添加到ASP.NET网站时,我收到了以下错误:

  

当前上下文不支持系统事件通知。例如,服务器进程可能不支持全局系统事件通知。

[InvalidOperationException: System event notifications are not supported under the current context. Server processes, for example, may not support global system event notifications.]
   System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) +10259418
   System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) +539
   // My code here where I call the proxy object's method to start the WCF call
嗯,为什么不呢?这似乎是非常有用的!

有没有办法解决这个问题?

2 个答案:

答案 0 :(得分:1)

您的服务运行的是什么版本的IIS(假设是IIS)? IIS 6比IIS 7更受限制 - 它只支持HTTP激活。同样,如果您尝试从IIS 6中启动对等客户端,则可能会因为同样的原因而阻止它 - IIS无法将响应定向到正确的工作进程。

您始终可以在Web服务器上将服务实现为Windows服务,并使用命名管道与ASP.NET站点进行通信。 (Windows服务将托管对等端点和命名管道端点,并且该站点将使用命名管道客户端。该服务将使用[ServiceBehavior]属性作为单个实例运行。

答案 1 :(得分:0)

由于绑定保持其上下文的方式,我不确定这是否可行。

我建议使用普通的http wcf服务并在配置数据库中注册每个主机,甚至使用主题并发布Web服务器需要处理的事件。