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(); } }
当我尝试从Silverlight应用程序连接它时,它成功:
static Microsoft.AspNet.SignalR.ClIEnt.HubConnection signalR { get; set; }public static Microsoft.AspNet.SignalR.ClIEnt.IHubProxy signalRhub { get; set; }public static voID StartSignalR(){ var url = "http://localhost:1968"; signalR = new Microsoft.AspNet.SignalR.ClIEnt.HubConnection(url); signalR.Received += signalR_Received; signalRhub = signalR.CreateHubProxy("echo"); signalR.Start().Wait(); signalRhub.Invoke("Say","hub invoked");}
我的下一步是从jquery连接SignalR集线器:
<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>
当我尝试运行此脚本时,它会给出错误:
"XMLhttpRequest cannot load localhost:1968/signalr/negotiate?clIEntProtocol=1.4&_=1404978593482. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin <code>http://localhost:55282</code> is therefore not allowed access."
为什么我可以从Silverlight页面连接到集线器(托管在localhost:3926中)
当我运行jquery脚本(托管在localhost:55282)时失败了吗?
如何在jquery和SignalR集线器之间建立有效连接?
解决方法 更改$(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); });});
至
$(function (){var connection = $.hubConnection("http://localhost:1968");var hub = connection.createHubProxy("echo");hub.on("AddMessage",Method);connection.start({ Jsonp: true }) .done(function () { console.log('connected'); hub.say("success?"); }) .fail(function (a) { console.log('not connected'+a); });});function Method(messageFromHub){alert(messageFromHub);}
和
class Startup { public voID Configuration(IAppBuilder app) { app.MapSignalR(); } }
至
class Startup { public voID Configuration(IAppBuilder app) { app.MapSignalR(new HubConfiguration() { EnableJsONP = true });} }
应该这样做.
app.MapSignalR(new HubConfiguration() { EnableJsONP = true });}
和
connection.start({ Jsonp: true })
将允许跨站点请求
总结以上是内存溢出为你收集整理的c# – 连接到信号器集线器全部内容,希望文章能够帮你解决c# – 连接到信号器集线器所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)