我有一个 WPF 应用程序,它使用 SignalR 来实现发布/订阅模型。当我使用 WPF 客户端连接到上述应用程序时,发布和回调工作成功。
然后我创建了一个 ASP.Net 客户端。我使用 SignalR 的跨域属性连接到上面的 WPF 应用程序。
它可以连接到应用程序并成功调用集线器中提供的方法。但是,当 WPF 应用程序调用 ASP.Net 客户端中的方法时,似乎该调用无法到达客户端浏览器
(在火狐浏览器中,长轮询不返回,即使我在javascript回调函数中设置了断点也无法到达断点,浏览器中什么也显示不出来)。
我在 html 中包含了以下脚本
<script src="@Url.Content("~/Scripts/jquery-1.6.4.min.js")" type="text/javascript</script>
<script src="/Scripts/jquery.signalR-1.0.0-rc2.min.js" type="text/javascript"></script>
<script src="http://localhost:9999/signalr/hubs" type="text/javascript"></script>
以下是我使用的javascript。
jQuery.support.cors = true;
myHub = $.connection.subscriberHub;
myHub.client.addMessage = function (msg, time) {
$("#message").prepend("<div>" + time + " " + msg + "</div>");
};
$.connection.hub.url = 'http://localhost:9999/signalr';
$.connection.hub.start();
以下是 WPF 应用程序中的服务器代码:
public partial class App : Application
{
private IDisposable app;
private void Application_Startup(object sender, StartupEventArgs e)
{
string url = "http://localhost:9999";
app = WebApplication.Start<Startup>(url);
}
private void Application_Exit(object sender, ExitEventArgs e)
{
if (app != null)
{
app.Dispose();
}
}
}
class Startup
{
public void Configuration(IAppBuilder app)
{
app.MapHubs();
}
}
当 WPF 应用程序单击按钮时,我发送消息:
private void btn_sendMsg_Click(object sender, RoutedEventArgs e)
{
var context = GlobalHost.ConnectionManager.GetHubContext<SubscriberHub>();
DateTime sentTime = DateTime.Now;
context.Clients.Group("subscriber").addMessage(tb_message.Text, sentTime);
MessageList.Insert(0,string.Format("{0:yyyy-MM-dd HH:mm:ss} {1}", sentTime, tb_message.Text));
}
以下是我定义的集线器:
public class SubscriberHub : Hub
{
string group = "subscriber";
public Task Subscribe()
{
return Groups.Add(Context.ConnectionId, group);
}
public Task Unsubscribe()
{
return Groups.Remove(Context.ConnectionId, group);
}
}
上面的代码有问题吗?