如何将运行URL的WCF服务配置为SignalR URL



我正在开发一个实时应用程序。我AM创建了ASP.NET MVC客户端应用程序和WCF Service。我再次需要在WCF和客户端中添加SignalR概念通知。

为此,我创建了一个自托管的SignalR,并将此解决方案添加到Visual Studio中的WCF服务解决方案中。

我的WCF服务运行URL地址是:http://localhost:63694/service1.svc

我的要求是wcf和Signalr一起工作。客户端是ASP.NET MVC4

WCF和ASP.NET MVC代码在这里

Signalr代码: -

      namespace SelfHostingSignalR
        {
           class Program
          {
                 static void Main(string[] args)
                 {
                 try
                  {
                      string url = "http://localhost:63694/Signalr";
                      using (WebApp.Start(url))
                  {
                     Console.WriteLine("Server running on {0}", url);
                     Console.ReadLine();
                  }
             }
              catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                   Console.ReadLine();
               }
            }
          }
          class Startup
          {
            public void Configuration(IAppBuilder app)
            {
               app.UseCors(CorsOptions.AllowAll);
               app.MapSignalR();
            }
         }
         public class MyHub : Hub
         {
           public void Send(string user)
           {
              Clients.All.addMessage(user);
            }
           }
      }

对于Signalr URL,我用WCF URL地址进行了硬编码:

字符串url =" http://localhost:63694/signalr";

我不知道这是正确的。

如何将运行URL的WCF服务配置为Signalr URL?

to wcf Web服务应用程序上的self-host Signalr,您只需要在Startup.cs中配置/signalr

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        app.UseCors(CorsOptions.AllowAll);
        app.MapSignalR();
    }
}

用这样的myHub定义:

public class MyHub : Hub
{
    public void Send(string user)
    {
        Clients.All.addMessage(user);
    }
}

在您的客户端MVC .NET应用程序中,您可以调用服务器方法并以下定义客户端方法:

    [HttpGet]
    public async Task<ActionResult> SignalR()
    {
        dynamic model = new ExpandoObject();
        using(var hubConnection = new HubConnection("http://localhost:63694"))
        {
            var myHub = hubConnection.CreateHubProxy("MyHub");
            myHub.On<string>("addMessage", (user) =>
            {
                model.User = user;
            });
            await hubConnection.Start();
            await myHub.Invoke("Send", "an user");
        }
        return View(model);
    }

最新更新