Мы используем TIBCO EMS из нашего приложения ASP.NET 3.5 для одного интерфейса для внешней системы, и, похоже, он работает очень хорошо - за исключением того, что ребята работают с другим сторона говорит нам, что мы сталкиваемся с такими соединениями, как сумасшедшие, и никогда их не закрываем ....Автоматическое закрытие соединений TIBCO EMS, когда они больше не нужны
Что я делаю - это маршрутизация всего трафика TIBCO через один класс со статическими переменными-членами как для TIBCO ConnectionFactory
, так и для самого Connection
, было сказано, что их строительство довольно ресурсоемким и временным:
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;
}
}
Теперь мой Проблема: где и как я мог
- сказать соединение TIBCO на «авто-близко», когда больше не требуется (например, с
SqlConnection
) - закрыть соединение TIBCO на ошибки
- закрыть TIBCO соединение до того, как наше приложение ASP.NET закончится (или пользователь отключится)
0 На самом деле, похоже, что я не нашел много полезной информации о том, как использовать TIBCO EMS из мира C#/.NET ..... любые берущие? Благодаря!!
Спасибо за ваши мысли - я согласен, у меня было впечатление, что там должно быть единственное соединение - но веб-программирование находится где-то между черным искусством и вуду для меня (я - программист Winforms и backend SQL Server, в основном) –
Здесь может быть проблема параллелизма. Вы должны по крайней мере окружать оператор 'if' в' Application.Lock() 'и' Application.Unlock() '. Это то же самое, что и «lock» в обычном программировании WinForms.Не могли бы вы попытаться выполнить регистрацию времени создания нового соединения? Это может быть намек. –
Спасибо за ваши подсказки - все это на месте (.Lock() и т. Д.), Кажется, значительно улучшилось. –