У меня высоконагруженный веб-сайт ASP .NET MVC2 и служба WCF, которую использует этот сайт. Раньше я создавал один прокси каждый раз, когда мне это нужно, и даже не закрывал его. Обратитесь к моему предыдущему вопросу (с моей большой благодарностью за пользователя SO Richard Blewett ) Я обнаружил, что должен закрыть этот прокси. В противном случае это будет успешное ограничение сеансов.
Теперь я создаю прокси-приложение, которое запускается один раз, а затем просто проверяю его и воссоздаю, если это необходимо. Итак, вот код:
public static bool IsProxyValid(MyServ.MyService client) {
bool result = true;
if ((client == null) || (client.State != System.ServiceModel.CommunicationState.Opened) // || (client.InnerChannel.State != CommunicationState.Opened)
)
result = false;
return result;
}
public static AServ.AServClient GetClient(HttpContext http) {
if (!IsProxyValid((MyService)http.Application["client"]))
http.Application["client"] = new MyService();
return (MyService)http.Application["client"];
}
public static MyServ.MyService GetClient(HttpContextBase http)
{
if (!IsProxyValid((MyService)http.Application["client"]))
http.Application["client"] = new MyService();
return (MyService)http.Application["client"];
}
public ActionResult SelectDepartment(string departments)
{
try
{
MyService svc = CommonController.GetClient(this.HttpContext);
Department[] depsArray = svc.GetData(departments);
// .... I cut here ....
return View();
}
catch (Exception exc)
{
// log here
return ActionUnavailable();
}
}
Итак, что вы, ребята, думаете об этом? Должно ли это работать правильно? Иногда мое приложение зависало. Я думаю, что это потому, что состояние прокси-клиента определяет неправильно, и приложение пытается использовать сломанный прокси.
РЕДАКТИРОВАНИЕ ПОЧТЫ
Также в TCP Monitor я вижу множество установленных соединений от сайта к сервису. Почему он создает много соединений вместо использования одного глобального? Может быть, какое-то исключение произошло при вызове метода service, переводящего его в состояние отказа?
Надеюсь на вашу помощь, ребята!