我们将ASP.NET 3.5应用程序中的TIBCO EMS用于外部系统的一个界面,它看起来运行得很好 - 除了运行另一方的人告诉我们我们正在建立连接之类的疯了,永远不会关闭它们....
我正在做的是通过一个具有静态成员变量的类来为TIBCO ConnectionFactory
和Connection
本身路由所有TIBCO流量,并且已经被告知构建它们是非常资源和时间密集的:
private static ConnectionFactory Factory
{
get
{
if (HttpContext.Current.Application["EMSConnectionFactory"] == null)
{
ConnectionFactory connectionFactory = CreateTibcoFactory();
HttpContext.Current.Application["EMSConnectionFactory"] = connectionFactory;
}
return HttpContext.Current.Application["EMSConnectionFactory"] as ConnectionFactory;
}
}
private static Connection EMSConnection
{
get
{
if (HttpContext.Current.Application["EMSConnection"] == null)
{
Connection connection = Factory.CreateConnection(*username*, *password*);
connection.ExceptionHandler += new EMSExceptionHandler(TibcoConnectionExceptionHandler);
connection.Start();
HttpContext.Current.Application["EMSConnection"] = connection;
}
return HttpContext.Current.Application["EMSConnection"] as Connection;
}
}
现在我的麻烦是:我在哪里以及如何
SqlConnection
)我似乎并没有找到关于如何在C#/ .NET世界中使用TIBCO EMS的有用信息......任何参与者?谢谢!
答案 0 :(得分:1)
首先,我不明白你如何耗尽连接。由于您在应用程序中存储连接,因此整个IIS应用程序应该只有一个连接。
放下一边,我会做以下事情:
DateTime
设置为DateTime.Now
; DateTime.Now
之间的差异。如果该时间长于特定超时,则终止连接并将Application["EMSConnectionFactory"]
设置为null; to
DateTime.Now`。这样,连接应该自动关闭。
请注意,您必须引入锁定。您可以使用Application.Lock()
和Application.Unlock()
。
关于关闭错误:我看到您已将异常处理程序附加到连接实例。你不能用它关闭连接吗?