我在MVC应用程序中使用signalr 2.2.2。除了事实之外,一切都运行正常,每次应用程序导航到另一个页面时,都会显示以下形式的控制台错误:
XML Parsing Error: no root element found
Location: http://localhost/signalr/abort?transport=serverSentEvents&clientProtocol=1.5&connectionToken=2elX1XZHXH0xmQaLZKyHUFW5Z2rb2DGRYEI...
这只发生在firefox中。有人知道如何解决这个问题吗? 感谢
答案 0 :(得分:0)
可能与已知的Firefox-884693问题有关。根据一些研究(here和here)和searching通过SignalR代码,修复将在回复响应之前分配Content-Type
。因此可能需要更改以下文件。
// src/Microsoft.AspNet.SignalR.Core/PersistentConnection.cs
private static Task FailResponse(IResponse response, string message, int statusCode = 400)
{
response.StatusCode = statusCode;
// response.ContentType = "text/plain"; // <--- ADD THIS LINE
return response.End(message);
}
// src/Microsoft.AspNet.SignalR.Core/Transports/WebSocketTransport.cs
private Task AcceptWebSocketRequest(Func<IWebSocket, Task> callback)
{
var accept = _context.Environment.Get<Action<IDictionary<string, object>, WebSocketFunc>>(OwinConstants.WebSocketAccept);
if (accept == null)
{
// Bad Request
_context.Response.StatusCode = 400;
// _context.Response.ContentType = "text/plain"; // <--- ADD THIS LINE
return _context.Response.End(Resources.Error_NotWebSocketRequest);
}
Action<IWebSocket> prepareWebSocket = socket => {
_socket = socket;
socket.OnClose = _closed;
socket.OnMessage = _message;
socket.OnError = _error;
};
var handler = new OwinWebSocketHandler(callback, prepareWebSocket, _maxIncomingMessageSize);
accept(null, handler.ProcessRequest);
return TaskAsyncHelper.Empty;
}
这需要将bug提交给开源项目,分叉,应用更改,测试,创建拉取请求等等,这比我现在的时间更长。如果有人想测试这个理论,谢谢。