我的场景是,我需要一个SignalR自托管WCF服务,该服务可以响应并向来自W的所有连接用户发送消息或WPF。
我已经尝试了很多如下:
namespace SignalRServiceClass { [ServiceContract] public interface ISignalRServiceClass { [OperationContract] string GetsMessage(string name); [OperationContract] void Configuration(IAppBuilder app); [OperationContract] void Send(string name, string message); } } namespace SignalRServiceClass { public class SignalRServiceClass : ISignalRServiceClass { public string GetsMessage(string name) { return "Message From Service " + name + "!"; } } } namespace SignalRServiceClass { class ClassHub : Hub { public void Send(string name, string message) { Clients.All.addMessage(name, message); } } } namespace SignalRServiceClass { class Startup { public void Configuration(IAppBuilder app) { // app.UseCors(CorsOptions.AllowAll); // app.MapSignalR(); app.Map("/signalr", map => { map.UseCors(CorsOptions.AllowAll); var hubConfiguration= new HubConfiguration { EnableDetailedErrors=true, EnableJSONP= true }; map.RunSignalR(hubConfiguration); }); } } }
和第二个通知客户端。我在这里对如何在这里管理客户端代码感到困惑,但我在下面放了一些用于测试的代码。
private void button1_Click(object sender, EventArgs e) { //MessageBox.Show(test.GetsMessage("This is the Test Message")); var hubConnection = new HubConnection("http://localhost:50172/"); var serverHub = hubConnection.CreateHubProxy("MessageRecievingHub"); serverHub.On("broadCastToClients", message => MessageBox.Show(message)); hubConnection.Start().Wait(); }
请以这种方式指导我。您的帮助将不胜感激。我已经尝试并谷歌了很多,但徒劳无功。
提前非常感谢。
您不想要SignalR,您需要XSockets WCF示例
SignalR和WCF不会以这种方式互操作,也不需要这样做。如果您使用的是SignalR,则没有理由使用WCF-您可以在IIS或自托管上发布集线器(请参阅asp.net/signalr的入门教程和自托管教程),并使用桌面或JavaScript/超文本标记语言客户端连接到它。
您可以轻松创建一个.NET客户端应用程序来与您的SignalR服务器通信-下面是一个简单的WinForm.NETC#客户端,用于发送和接收SignalR消息:
namespace SignalrTestClient
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
async void Form1_Load(object sender, EventArgs e)
{
var hubConnection = new HubConnection("http://localhost:8080/");
IHubProxy hubProxy = hubConnection.CreateHubProxy("MyHub");
await hubConnection.Start();
hubProxy.On("addMessage", message => onData(message));
await hubProxy.Invoke("Send", "Hello SignalR Server!");
}
private void onData(string msg)
{
Console.WriteLine(msg);
}
}
}
在您的SignalR服务器中,您只需要以下集线器类:
public class MyHub : Hub
{
public void Send(string message)
{
Console.WriteLine("Received a message from a client");
if (message.Contains("Hello")) {
Clients.All.addMessage("Well hello there client!");
}
}
}
也可以为SignalR创建C客户端