4

我正在通过从一个正在运行的实例迁移到三个来测试 Azure 云服务的横向扩展功能。我们使用 Standard_A2 节点、WorkerRole 和 SignalR 进行客户端-服务器连接。

执行此操作后,任何入站 SignalR 连接都会返回 400“错误请求”HTTP 错误。恢复到单个实例可以解决问题,并且客户端-服务器交互再次正常工作,因此扩展肯定是问题的原因。这是错误:

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 with Redis Backplane Behind F5 - StatusCode: 400, ReasonPhrase: 'Bad Request')。

我已将 machineKey 元素添加到配置文件(在 system.web 中),如下所示,并重新部署:

<machineKey validationKey="FIRST_KEY"  
        decryptionKey="SECOND_KEY" 
        validation="SHA1" decryption="Auto" />

服务器的响应没有变化。我也试过设置decryption="AES"。没变。

尽管进行了广泛的搜索,但似乎没有任何明确的指导方针来说明如何使用单个 machineKey 进行部署。我最好的下一步是什么?还是我走错了方向?

4

0 回答 0