2015-06-22 4 views
1

После развертывания библиотеки сервисов WCF для нового webfarm с использованием ARR и IIS в Windows 2012 я столкнулся с проблемой.WCF через ARR: Disappearing cookie

Попытка вызова метода с использованием wcftestclient, я получаю: «Значок контекста безопасности истекает или недействителен. Сообщение не обрабатывалось».

Я включил файлы cookie в файле конфигурации. Глядя на поток трафика в Wireshark, это то, что я вижу:

-> POST, SOAP 
<- Set-Cookie: ARRAffinity=..., SOAP 
-> POST, Cookie: ARRAffinity=..., SOAP 
<- SOAP 
-> POST, Cookie: ARRAffinity=..., SOAP 
<- SOAP 
-> POST, SOAP (no cookie) 
<- SOAP (500) 

Dump от Wireshark, с содержанием раздели: https://ghostbin.com/paste/mshuk

Глядя на журналы в Splunk, я вижу, что окончательный POST получает направленных на другой сервер фермы, чем предыдущие, что делает контекст безопасности недействительным.

+0

Вы нашли решение для этого? Tx – Fabske

+1

К сожалению, нет. У меня был выделенный хост для моих служб WCF. –

ответ

1

Это не решение вашей проблемы, но я надеюсь, что это поможет людям.

Поскольку я не мог найти правильный способ обработки ARR-файла cookie, я решил проблему в другом направлении: как сделать WCF полностью безгосударственным, чтобы каждый вызов мог работать на любом сервере, поэтому нам все равно больше об ARR cookie.

На стороне WCF это довольно просто: установите привязку InstallSecurityContext = false.

В коде:

binding.Security.Message.EstablishSecurityContext = false; 

В XML:

<binding name="SecureBindingBigSize"> 
    <security mode="TransportWithMessageCredential"> 
    <message establishSecurityContext="false" clientCredentialType="UserName"/> 
    </security> 
</binding> 

Конечно, ваше приложение должно быть совместимо с таким поведением (= не используется сеанса).

Для информации, моя WsHttpBinding использует защиту https и TransportWithMessageCredential.