Signalr 奥温霍斯特的行车信号员

Signalr 奥温霍斯特的行车信号员,signalr,owin,signalr-hub,katana,Signalr,Owin,Signalr Hub,Katana,我在VS 2013中创建了一个新的空项目,将其配置为使用OwinHost运行,并按顺序安装了以下软件包: PM> Install-Package Owinhost PM> Install-Package Microsoft.Owin PM> Install-Package Microsoft.Owin.StaticFiles PM> Install-Package Microsoft.AspNet.SignalR.JS PM> Update-Package jQue

我在VS 2013中创建了一个新的空项目,将其配置为使用OwinHost运行,并按顺序安装了以下软件包:

PM> Install-Package Owinhost
PM> Install-Package Microsoft.Owin
PM> Install-Package Microsoft.Owin.StaticFiles
PM> Install-Package Microsoft.AspNet.SignalR.JS
PM> Update-Package jQuery
PM> Install-Package Microsoft.AspNet.SignalR.Owin
然后,我添加了一个Hub类,如下所示:

using Microsoft.AspNet.SignalR;
namespace OwinHosting
{
    public class MyHub : Hub
    {
        public void Send(string name, string message)
        {
            Clients.All.addMessage(name, message);
        }   
    } 
}
在startup.cs中,我添加了以下内容:

using Microsoft.AspNet.SignalR;
using Microsoft.Owin;
using Owin;

[assembly: OwinStartup(typeof(OwinHosting.Startup))]
namespace OwinHosting
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
           var config = new HubConfiguration {EnableCrossDomain = true };
           app.MapHubs(config);

            app.UseStaticFiles("/Web");
         }
     }
 }
最后,我添加了一个Web文件夹,将脚本文件夹移动到其中,并添加了index.html页面:

<!DOCTYPE html>
<html>
<head>
<title>SignalR Simple Chat</title>
<style type="text/css">
    .container {
        background-color: #99CCFF;
        border: thick solid #808080;
        padding: 20px;
        margin: 20px;
    }
</style>
</head>
<body>
<div class="container">
    <input type="text" id="message" />
    <input type="button" id="sendmessage" value="Send" />
    <input type="hidden" id="displayname" />
    <ul id="discussion"></ul>
</div>

<!--Script references. -->
<!--Reference the jQuery library. -->
<script src="Scripts/jquery-2.1.0.min.js"></script>
<!--Reference the SignalR library. -->
<script src="Scripts/jquery.signalR-2.0.3.min.js"></script>
<!--Reference the autogenerated SignalR hub script. -->
<script src="http://localhost:8888/signalr/hubs"></script>

<!--Add script to update the page and send messages.-->
<script type="text/javascript">
    $(function () {
        //Set the hubs URL for the connection
        $.connection.hub.url = "http://localhost:8888/signalr";

        // Declare a proxy to reference the hub.
        var chat = $.connection.myHub;

        // Create a function that the hub can call to broadcast messages.
        chat.client.addMessage = function (name, message) {
            // Html encode display name and message.
            var encodedName = $('<div />').text(name).html();
            var encodedMsg = $('<div />').text(message).html();
            // Add the message to the page.
            $('#discussion').append('<li><strong>' + encodedName
                + '</strong>:&nbsp;&nbsp;' + encodedMsg + '</li>');
        };
        // Get the user name and store it to prepend to messages.
        $('#displayname').val(prompt('Enter your name:', ''));
        // Set initial focus to message input box.
        $('#message').focus();
        // Start the connection.
        $.connection.hub.start().done(function () {
            $('#sendmessage').click(function () {
                // Call the Send method on the hub.
                chat.server.send($('#displayname').val(), $('#message').val());
                // Clear text box and reset focus for next comment.
                $('#message').val('').focus();
            });
        });
    });
</script>

信号员简单聊天
.集装箱{
背景色:#99CCFF;
边框:厚实线#808080;
填充:20px;
利润率:20px;
}
    $(函数(){ //设置连接的集线器URL $.connection.hub.url=”http://localhost:8888/signalr"; //声明代理以引用中心。 var chat=$.connection.myHub; //创建一个中心可以调用以广播消息的函数。 chat.client.addMessage=函数(名称、消息){ //Html编码显示名称和消息。 var encodedName=$('').text(name).html(); var encodedMsg=$('').text(message.html(); //将消息添加到页面。 $(“#讨论”)。追加(“
  • ”+encodedName +“:”+encodedMsg+”
  • ); }; //获取用户名并将其存储到消息前。 $('#displayname').val(提示('输入您的姓名:',''); //将初始焦点设置为消息输入框。 $(“#消息”).focus(); //启动连接。 $.connection.hub.start().done(函数(){ $('#sendmessage')。单击(函数(){ //在集线器上调用Send方法。 chat.server.send($('#displayname').val(),$('#message').val()); //清除文本框并重置下一条注释的焦点。 $('#message').val('.focus(); }); }); });

    当我运行页面时,它要求输入“用户名”。当我输入一条信息并点击“发送”时,它没有任何回应

    我使用了Chrome工具,由于某种原因,“click”事件中的“chat”变量似乎没有定义

    有什么想法吗


    谢谢

    我认为您的问题是没有安装正确的NuGet软件包

    chat
    chat
    变量未定义的原因可能是您的
    http://localhost:8888/signalr/hubs未找到脚本,该脚本负责定义
    $.connection.myHub

    由于您使用的是最新版本(2.0.3)的SignalR JS客户端,因此还应该使用最新的SignalR服务器组件。您安装的软件包在SignalR 2.x.x中不再存在。最新的Microsoft.AspNet.signal.Owin软件包实际上依赖于已过时的Microsoft.AspNet.signal.Core 1.2.1

    启动自托管SignalR的最简单方法可能是卸载所有与SignalR和Owin相关的软件包,并遵循本教程:

    本教程基于使用,它依赖于Microsoft.Owin.SelfHost而不是OwinHost

    安装Microsoft.Owin.Cors包并调用
    app.UseCors(CorsOptions.AllowAll)是非常重要的与教程中类似,因为
    HubConfiguration.EnableCrossDomain
    属性不再存在