我使用包管理器控制台将SignalR 2.0.2安装到我的MVC 4.5应用程序中。我做了连接配置的标准示例。
namespace SignalRPersistent
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.MapSignalR("/echo");
}
}
}
问题是MapSignalR方法不接受字符串,而编译错误则表示
参数类型字符串不能分配给参数类型SignalRHubConfiguration。但我可以看到一个接受字符串的重载方法,但它坚持不编译。有什么问题?
答案 0 :(得分:4)
我改变了下面的代码并开始工作。
app.MapSignalR<ConnectionHub>("/echo");
ConnectionHub 是从PersistentConnection继承的类。互联网上的例子不需要指定课程,但它们对我没有用。
答案 1 :(得分:3)
好的,Ryu提供的解决方案是正确的 - 但可能会让许多人感到困惑。说实话,我还没有找到一个演练(使用完全相同的代码作为示例) - 但没有任何效果,部分原因是随着信号器项目的推进,许多东西变得过时。
所以,你有一个扩展 PersistentConnection 的类,在这个类中你有所有的任务(OnConnected,OnReceived等):
using System.Threading.Tasks;
using Microsoft.AspNet.SignalR;
public class MyAwesomeConnection : PersistentConnection
{
protected override Task OnConnected(IRequest request, string connectionId)
{
var fromClient = request.QueryString["testQuery"];
return base.OnConnected(request, connectionId);
}
protected override Task OnReceived(IRequest request, string connectionId, string data)
{
return base.OnReceived(request, connectionId, data);
}
}
然后你&#34;映射&#34; OwinStartup类中的那个类(在本例中为 MyAwesomeConnection ):
using DataCommunication;
using Microsoft.Owin;
using Owin;
[assembly: OwinStartup(typeof(SignalRServer.Startup))]
namespace SignalRServer
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.MapSignalR<MyAwesomeConnection>("/server");
}
}
}
现在你可以使用javascript连接了,在引用jquery和jquery.signalR脚本时要非常小心。首先是jquery,然后是jquery.signalR,然后是所有其他使用signalR东西的脚本,并避免使用@ Scripts.Render(&#34; bundles / jquery&#34;)。只是用旧时尚的方式做到:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
<title>@ViewBag.Title</title>
<script type="text/javascript" src="Scripts/jquery-1.10.2.min.js"></script>
<script type="text/javascript" src="Scripts/jquery.signalR-2.1.1.min.js"></script>
@Styles.Render("~/Content/css")
@Scripts.Render("~/bundles/modernizr")
</head>
<body>
<script>
var connection = $.connection("/server", "testQuery=This crap finally works", true);
connection.start();
</script>
@RenderBody()
@Scripts.Render("~/bundles/bootstrap")
@RenderSection("scripts", required: false)
</body>
</html>
在MyAwesomeConnection类的OnConnected内部设置一个断点,并读出变量 fromClient ,一旦客户端(javascript)连接,它就会触发。它应该有希望读出来&#34;这个废话最终有效&#34;。
现在你应该好好用signalR构建一些引人注目的东西,如果某些东西仍然不起作用 - 那么你要么缺少nuget中的一些程序集,要么缺少项目中未正确设置的引用。