想象一下一个监控网站,它通过.net远程连接到50个服务并轮询它们以检查它们是否正常工作并找出它们正在进行的操作并显示它。
页面使用ajax命中后端,然后后端连接到每个后端。
理想情况下,我不希望它以5秒的间隔打开连接,执行请求,关闭连接,连接50个连接(除非这是最佳实践方式?)。所以我希望MVC坚持这种联系。
我可以创建一个ConnectionManager静态单例来处理这个(不确定在哪里?),根据需要打开和关闭连接/空闲。
您甚至可以让ConnectionManager处理服务器状态,因此如果多人加载状态网页,则会缓存结果。
但是有更好的方法,尤其是可扩展的方式吗?您可以在webfarm场景中拥有多个ConnectionManager类,因为它们不会与afaik冲突(您可以打开多个连接)。
ATM我在我的ajax方法中这样做:
TcpChannel tcpChannel = new TcpChannel();
ChannelServices.RegisterChannel(tcpChannel, false);
Type requiredType = typeof(ICatServerMarshaller);
ICatServerMarshaller remoteObject = (ICatServerMarshaller)Activator.GetObject(requiredType,
"tcp://localhost:4567/CatServerMarshaller");
string catStatus;
try
{
catStatus = remoteObject.GetCatStatus().ToString();
}
catch (SocketException ex)
{
catStatus = "Offline";
}
finally
{
ChannelServices.UnregisterChannel(tcpChannel);
}
return Json(new { catStatus = catStatus});