在IIS中托管SignalR

10

我在思考一个问题,这几天一直困扰着我:是否可以在IIS中托管SignalR Hub?这种情况是否可能发生?我找到了一个名为“自托管”的解决方案,但需要借助控制台应用程序。我想在我的IIS中托管SignalR Hub,这是否可能?有人能提供相关示例吗?

我将发布自托管代码,希望能够帮到大家。

class Program
    {
        static void Main(string[] args)
        {
            // This will *ONLY* bind to localhost, if you want to bind to all addresses
            // use http://*:8080 to bind to all addresses. 
            // See http://msdn.microsoft.com/en-us/library/system.net.httplistener.aspx 
            // for more information.
            string url = "http://localhost:8080";
            using (WebApp.Start(url))
            {
                Console.WriteLine("Server running on {0}", url);
                Console.ReadLine();
            }
        }
    }
    class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.UseCors(CorsOptions.AllowAll);
            app.MapSignalR();
        }
    }
    public class MyHub : Hub
    {
        public void Send(string name, string message)
        {
            Clients.All.addMessage(name, message);
        }
    }

你能找到解决方案吗? - Serhat Morkoç
3个回答

10

IIS默认情况下不支持Websocket。Websocket在IIS 8中被引入,需要从Windows的可选功能中启用:https://learn.microsoft.com/en-us/iis/get-started/whats-new-in-iis-8/iis-80-websocket-protocol-support

可选功能 -> IIS -> WWW服务 -> 应用程序开发功能 -> Websocket协议

声明:我在自己提问后找到了这个答案,所以我从那里复制了我的答案:https://dev59.com/z7roa4cB1Zd3GeqPmIdU#61411666

如果有人在我之后发现这个问题,我想提供一个比接受的答案更好的可行答案。


5

3
我已创建了一个WEB API项目,并在其中实现了SignalR所需的所有逻辑和Hub。从VS运行正常,但在服务器上通过IIS托管后,它无法正常工作,也没有异常。因此,我想知道是否需要创建另一个与WEB API不同的网站来托管我的SignalR逻辑。 - ruud
10
我不明白为什么这个问题被标记为正确。链接的教程是关于使用OWIN自托管SignalR,因此并未解决OP关于如何在IIS托管应用程序中使用SignalR的问题。仅在IIS应用程序中创建SignalR中心没有任何效果。 - Tyler Jones
这个教程包含了创建一个新的asp.net项目所需的所有内容,然后可以轻松地在IIS上发布和运行。您遇到了什么问题? - Tim B James
4
我同意@TylerJones的观点。我看了两遍那篇文章,因为我以为我错过了IIS部分。那个链接与IIS主机无关。 - CoderForHire
5
从他们的网站复制并粘贴并不能改变任何事情。没有在IIS中托管SignalR的示例。告诉别人这很容易并不会向你展示如何做到这一点。 - CoderForHire
显示剩余3条评论

0
自托管 SignalR 服务器的部署方式是通过管理员权限运行控制台 exe。192.168.1.10 是本地计算机 IP 地址。其他设备可以通过 SignalR 连接该 URL。
fullIP = @"http://" + "192.168.1.10" + @":9001" SignalR = WebApp.Start(fullIP);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接