Как настроить machineKey для облачной службы, работающей в Azure?
Я тестирую возможности горизонтального масштабирования нашей облачной службы Azure, переходя с одного работающего экземпляра на три. Мы используем узлы Standard_A2, WorkerRole и SignalR для соединений клиент-сервер.
После этого любые входящие соединения SignalR возвращают 400 ошибок HTTP "Bad Request". Возврат к единственному экземпляру избавляет от проблемы, и взаимодействия клиент-сервер снова работают нормально, поэтому масштабирование определенно является причиной проблемы. Вот ошибка:
Microsoft.AspNet.SignalR.Client.HttpClientException: StatusCode: 400, ReasonPhrase: 'Bad Request', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
Transfer-Encoding: chunked
Server: Microsoft-HTTPAPI/2.0
{
Transfer-Encoding: chunked
Server: Microsoft-HTTPAPI/2.0
X-Content-Type-Options: nosniff
Date: Wed, 24 Dec 2014 09:16:32 GMT
}
at Microsoft.AspNet.SignalR.Client.Http.DefaultHttpClient+<>c__DisplayClass6.<Post>b__5 (System.Net.Http.HttpResponseMessage responseMessage) [0x00000] in <filename unknown>:0
at Microsoft.AspNet.SignalR.TaskAsyncHelper+<>c__DisplayClass19`2[T,TResult].<Then>b__17 (System.Threading.Tasks.Task`1 t) [0x00000] in <filename unknown>:0
at Microsoft.AspNet.SignalR.TaskAsyncHelper+TaskRunners`2+<>c__DisplayClass3a[System.Net.Http.HttpResponseMessage,Microsoft.AspNet.SignalR.Client.Http.IResponse].<RunTask>b__39 (System.Threading.Tasks.Task`1 t) [0x00000] in <filename unknown>:0
Я проверил ResponseBody на наличие этих ошибок (используя HttpClientExpection.GetError().ResponseBody
) и может подтвердить, что возвращается "ConnectionId в неверном формате". Это может указывать на то, что проблема возникает из-за того, что machineKey не совпадает в трех запущенных экземплярах (см., Например, следующее: SignalR с объединительной платой Redis за F5 - StatusCode: 400, ReasonPhrase: "Bad Request").
Я добавил элемент machineKey в файл конфигурации (в system.web) следующим образом и перераспределил:
<machineKey validationKey="FIRST_KEY"
decryptionKey="SECOND_KEY"
validation="SHA1" decryption="Auto" />
В ответе от сервера не было никаких изменений. Я тоже пробовал настройку decryption="AES"
, Без изменений.
Несмотря на обширные поиски, кажется, что нет четких руководящих принципов для того, чтобы развернуть с одним machineKey. Какой мой лучший следующий шаг? Или я иду в совершенно неправильном направлении?