2014-11-05 6 views
0

Моя проблема заключается в следующем: - У меня есть сайт .Net MVC, в котором много вызовов для служб WCF, размещенных на двух серверах за сервером балансировки нагрузки (BigIP).сохранение сеанса пользователя на клиенте WCF при выполнении вызовов на серверы за балансом нагрузки

Мне нужно поддерживать сеанс пользователя в службах WCF (управляемый пользовательским токеном). Моя проблема в том, что липкая сессия не работает, когда на сайте регистрируется много пользователей (много одновременных вызовов сервисов).

Что я выяснил, так это то, что когда сайт вызывает повторное использование сервиса, сервер балансировки нагрузки игнорирует липкий файл cookie сеанса и перенаправляет запрос на последний сервер, который получил вызов этим соединением.

Я проверил с помощью сниффера (Wireshark), и каждый вызов отправляется серверу балансировки нагрузки с правильным липким токеном сеанса.

При создании соединения с нуля учитывается cookie-сессия cookie, и запрос отправляется на нужный сервер.

Итак, как я могу справиться с этой ситуацией? Я ищу что-то, что обеспечивает создание нового соединения для каждого вызова, но свойство KeepAliveEnabled = "false" не работает.

Tks.

+3

Попробуйте сделать это псевдо состояние меньше, перемещая данные сессии в синхронном магазин как база данных или AppFabric – TGlatzer

+0

Это мой обходной путь решения, но я избегаю это сейчас, Tks! –

+0

Обратите внимание, что липкие сеансы создают проблемы в случае, если машина отключена для исправления, развертывания или ремонта. Это делает их недопустимым решением большую часть времени. – usr

ответ

0

Моя проблема была решена с использованием правильной конфигурации keepAliveConnection для Framework 4. Bellow - это конфигурации.

неправильный

<bindings> 
    <customBinding> 
    <binding name="WSHttpBinding_IServiceSessionCreator" keepAliveEnabled="false"> 
     <httpTransport /> 
    </binding> 
    </customBinding> 
</bindings> 

Правильный один

<bindings> 
    <customBinding> 
    <binding name="WSHttpBinding_IServiceSessionCreator" > 
     <textMessageEncoding /> 
     <httpTransport allowCookies="false" keepAliveEnabled="false"/> 
    </binding> 
    </customBinding> 
</bindings> 

Я не знаю, почему первый один не работал. Я видел его в этой ссылке http://msdn.microsoft.com/en-us/library/vstudio/ms730128(v=vs.100).aspx