【发布时间】:2014-08-06 20:57:15
【问题描述】:
我正在开发一个使用 Windows 服务执行某些处理的 MVC 5 应用程序;我正在使用信号 R,以便我可以显示 Windows 服务是否在 UI 上运行,并允许用户手动开始处理(而不是按计划运行)。
在服务器端我有以下配置:
public class SignalRStartup
{
public static IAppBuilder App = null;
public void Configuration(IAppBuilder app)
{
app.Map("/signalr", map =>
{
map.UseCors(CorsOptions.AllowAll);
var hubConfiguration = new HubConfiguration
{
EnableDetailedErrors = true,
};
map.RunSignalR(hubConfiguration);
});
}
}
这样使用:
SignalR = WebApp.Start<SignalRStartup>(_settings.LoaderServiceUrl);
现在加载器服务的 url 是:http://localhost:8080
然后在客户端:
var adminHubProxy = $.connection.adminHub;
adminHubProxy.client.updateProcessing = function(status) {
if (status === true) {
$('#processing').show();
} else {
$('#processing').hide();
}
};
$.connection.hub.url = 'http://localhost:8080/signalr';
$.connection.hub.start();
$('#startProcessingLink').on('click', function() {
adminHubProxy.server.startProcessing();
});
如果包含生成的代理的代码很重要:
<script src="http://localhost:8080/signalr/hubs"></script>
所以我遇到的问题是,当我触发 startProcessing 函数时,服务器会返回此错误消息:
XMLHttpRequest cannot load http://localhost:8080/signalr/send?transport=serverSentEvents&connectionTok…Pp7JqCJOnkJEA%3D%3D&connectionData=%5B%7B%22name%22%3A%22adminhub%22%7D%5D.
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost' is therefore not allowed access.
从我所做的所有阅读中,我的配置应该通过允许所有 CORS 请求来解决这个问题,但事实并非如此,我不明白为什么。
编辑 经过更多调试后,我提取了协商调用响应的详细信息,并看到以下标头:
Access-Control-Allow-Credentials:true
Access-Control-Allow-Origin:http://localhost
我完全不确定为什么要添加凭据标头,但原始标头再次让我相信这应该可以工作。
【问题讨论】:
标签: c# asp.net-mvc signalr cors