我正在开发一个实时应用程序。我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);
}