C# 连接到信号集线器

C# 连接到信号集线器,c#,javascript,jquery,signalr,C#,Javascript,Jquery,Signalr,我在控制台应用程序中创建了一个简单的信号器集线器: class Program { static void Main(string[] args) { using (WebApp.Start<Startup>("http://localhost:1968")) { Console.WriteLine("Server running!"); Console.Read

我在控制台应用程序中创建了一个简单的信号器集线器:

class Program
{
    static void Main(string[] args) 
    {    
        using (WebApp.Start<Startup>("http://localhost:1968"))
        {
            Console.WriteLine("Server running!");        
            Console.ReadLine();    
        } 
    } 
}

public static class UserHandler
{
    public static HashSet<string> ConnectedIds = new HashSet<string>();
}

[HubName("echo")]
public class EchoHub : Hub 
{ 
    public void Say(string message) 
    { 
        Trace.WriteLine("hub: "+message);
        Clients.All.AddMessage(message);
    }

    public override Task OnConnected()
    {
        UserHandler.ConnectedIds.Add(Context.ConnectionId);
        return base.OnConnected();
    }

    public override Task OnDisconnected()
    {
        UserHandler.ConnectedIds.Remove(Context.ConnectionId);
        return base.OnDisconnected();
    }
}

class Startup 
{ 
    public void Configuration(IAppBuilder app) 
    { 
        app.MapSignalR();
    } 
} 
我的下一步是从jquery连接信号集线器:

<script src="../Scripts/jquery-1.6.4.js"></script>
<script src="../Scripts/jquery.signalR-2.1.0.js"></script>
<script>
    $(function ()
    {
        var connection = $.hubConnection("http://localhost:1968");
        connection.start()
            .done(function () {
                console.log('connected');
                connection.send("success?");
            })
            .fail(function (a) {
                console.log('not connected'+a);
            });
    });
</script>
为什么我可以从Silverlight页面(托管在localhost:3926中)连接到集线器
运行jquery脚本(托管在localhost:55282中)时失败

如何在jQuery和SignalR hub之间建立工作连接?

更改

$(function ()
    {
    var connection = $.hubConnection("http://localhost:1968");
    connection.start()
        .done(function () {
            console.log('connected');
            connection.send("success?");
        })
        .fail(function (a) {
            console.log('not connected'+a);
        });
});

应该可以

app.MapSignalR(new HubConfiguration() { EnableJSONP = true });} 


将允许使用createHubProxy()在SignalR中的服务器上执行跨站点请求

RPC:

感谢Vishal Ravlani的回答

但对我来说

hub.say("success?");
不行!(对你有用吗?)

我必须写:

hub.invoke('say','success?');

信号器已经在客户端自动检测到交叉原点

在我使用的服务器上:

app.Map("/signalr", map =>
            {
                map.UseCors(CorsOptions.AllowAll);

                map.RunSignalR();
            });

上面描述了:

我猜这是一个跨站点请求,因为js托管在不同于SignalR hub的端口上。这是有道理的,但是为什么同样托管在不同端口上的Silverlight能够成功连接呢?如果是这样,是否可以设置信号集线器,以便允许交叉请求?。触犯者是浏览者。在silverlight实现中,我想您使用的是.NET SignalR客户端?您可以使用jsonp,但我会将SignalR移到WebServer是的,我使用的是.NET SignalR客户端。Vishal Ravlani提供的解决方案似乎有效,感谢您的回答。就我所知,这不是一个答案?如果你有问题,你应该自己提出…这是对Vishal Ravlanis答案的补充。就我而言,这个答案并不完全有效。我的问题针对Vishal Ravlanis…1@MichiBack
hub。Invoke
也对我有效,而不是
hub。说
谢谢,它在web Api和PHP客户端方面对我有帮助。我可以将其与WPF客户端相同吗?
class Startup 
{ 
    public void Configuration(IAppBuilder app) 
    { 
        app.MapSignalR(new HubConfiguration() { EnableJSONP = true });} 
} 
app.MapSignalR(new HubConfiguration() { EnableJSONP = true });} 
connection.start({ jsonp: true })
hub.say("success?");
hub.invoke('say','success?');
app.Map("/signalr", map =>
            {
                map.UseCors(CorsOptions.AllowAll);

                map.RunSignalR();
            });