SingalR在控制台应用程序中

时间:2018-05-05 23:55:30

标签: c# web-applications signalr

嗨,我正在尝试运行一个信号,并且通过一个控制台应用程序。 到目前为止这是我的代码

    class Program
{
    static IDisposable dis = null;

    static void Main(string[] args)
    {
        try
        {
            dis = WebApp.Start<Startup>("http://localhost:10476");
            Console.WriteLine("hi");
            Console.ReadKey();
        }
        catch(Exception ex)
        {
            Console.WriteLine(ex.Message);
        }

        if (dis != null)
            dis.Dispose();
    }
}

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        app.MapSignalR();
    }
}

public class myHub : Hub
{
    public void Hello()
    {
        Console.WriteLine("hi");
        Clients.All.OK();
    }
}

更新

这是我的客户代码

function send() {
var connection = $.hubConnection("http://localhost:10476");
var hub = connection.createHubProxy("myHub");
hub.on("OK", function () {
    alert("HI");
});
connection.start({jsonp: true})
    .done(function () {
        console.log('connected');
        hub.invoke("Hello");
    })
    .fail(function (a) {
        console.log('not connected' + a);
    });

}

注意:我的客户端和集线器是分开的(我希望客户端是浏览器扩展,而服务器是我计算机上的应用程序) 但是,当我调用此函数时,浏览器会在请求的资源上显示“No'Access-Control-Allow-Origin”标题。因此,不允许原点“http://localhost:63343”访问。 我的客户端代码是否正确?

1 个答案:

答案 0 :(得分:0)

如果您未启用CORS,负责加载页面的SignalR服务器和Web服务器应该相同。如果您希望它们位于独立的Web应用程序中,则必须在SignalR应用程序中启用cors。为了在Startup.cs中执行此操作:

 public void Configuration(IAppBuilder app)
 {
    app.Map("/signalr", map =>
    {
      map.UseCors(CorsOptions.AllowAll);
      var hubConfiguration = new HubConfiguration { };
      map.RunSignalR(hubConfiguration);
    });
  }

有关详细信息,请参阅以下链接:
https://cmatskas.com/signalr-cross-domain-with-cors/