通过hubConnection.Start()。Wait()

时间:2019-06-23 13:10:54

标签: c# signalr client console-application iis-6

我们无法通过控制台应用程序连接到部署在服务器(Windows Server 2008 Enterprise SP2和IIS 6)上的signalR集线器,我们在PC上本地测试了所有内容,并且一切正常,但已部署在服务器(IIS)上6)我们无法在服务器本身上进行远程甚至本地连接。

没有SignalR经验,但同一客户端在正常PC上运行良好。 (客户端和集线器在同一台PC中)。 我们测试了服务器的连接性和权限,一切都很好。 通过网络浏览器远程调用集线器URL(http://hr1/HRNotificationHub)时,我们可以访问它,但是当添加signalR / hub时,浏览器中也会出现404错误。

static void Main(string [] args)//客户端             {                 尝试                 {                     IHubProxy _hub;

                string url = @"http://localhost/HRNotificationHub/";

                var connection = new HubConnection(url);
                _hub = connection.CreateHubProxy("HRHub");
                connection.Start().Wait();

                _hub.On("ReceiveMessage", x => Console.WriteLine(x));

                string line = null;
                while ((line = System.Console.ReadLine()) != null)
                {
                    _hub.Invoke("BroadcastMessageToAll", line).Wait();
                }

                Console.Read();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.InnerException.ToString());
                Console.Read();

            }
        }


    public class Startup //Server
    {
        public void Configuration(IAppBuilder app)
        {
            app.UseCors(CorsOptions.AllowAll);

            var hubConfiguration = new HubConfiguration()
            {
                EnableDetailedErrors = true,
                EnableJSONP = true,
                EnableJavaScriptProxies = true
            };

            app.MapSignalR(hubConfiguration);
        }
    }


    [HubName("HRHub")]
    public class HRHub : Hub //Hub Class
    {
        public void BroadcastMessageToAll(string message)
        {
            Clients.All.newMessageReceived(message);

            var newMessage = message + "-newmessage";
            Clients.All.ReceiveMessage(newMessage);
        }

        public void JoinAGroup(string group)
        {
            Groups.Add(Context.ConnectionId, group);
        }

        public void RemoveFromAGroup(string group)
        {
            Groups.Remove(Context.ConnectionId, group);
        }

        public void BroadcastToGroup(string message, string group)
        {
            Clients.Group(group).newMessageReceived(message);
        }
    }

2 个答案:

答案 0 :(得分:0)

在本地,它在IIS Express下正常运行。

但是,在服务器上,您正在运行IIS 6,这不是受支持的版本。请检查documentation。至少需要IIS 7,但如果希望使用Web套接字,则需要IIS 8。

答案 1 :(得分:0)

我为解决此问题所做的所有工作就是在服务器上部署的项目的webconfig中添加以下行:

<modules runAllManagedModulesForAllRequests="true" />