サーバーコンソールアプリがあります。
static void Main(string[] args)
{
string url = "http://localhost:8080";
using (WebApp.Start(url))
{
MyHub hub = new MyHub();
Console.WriteLine("Server running on {0}", url);
var key = Console.ReadLine();
while (key != "quit")
{
hub.Send("Server", key);
}
}
}
public class MyHub : Hub
{
public void Send(string name, string message)
{
var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
context.Clients.All.addMessage(name, message);
}
}
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.UseCors(CorsOptions.AllowAll);
app.MapSignalR();
}
}
そして私の.NETクライアントアプリ
static void Main(string[] args)
{
MainAsync().Wait();
Console.ReadLine();
}
static async Task MainAsync()
{
try
{
var hubConnection = new HubConnection("http://localhost:8080/");
//hubConnection.TraceLevel = TraceLevels.All;
//hubConnection.TraceWriter = Console.Out;
IHubProxy hubProxy = hubConnection.CreateHubProxy("MyHub");
hubProxy.On("addMessage", data =>
{
Console.WriteLine("Incoming data: {0} {1}", data.name, data.message);
});
ServicePointManager.DefaultConnectionLimit = 10;
await hubConnection.Start();
}
catch (Exception ex)
{
}
}
クライアントの実行時にエラーは発生しません。ただし、コンソールには何も出力されません。
これらの2行のコメントを外すと:
hubConnection.TraceLevel = TraceLevels.All;
hubConnection.TraceWriter = Console.Out;
コンソールでいくつかのトレース出力を見ることができます
07:56:28.0121460 - 355ca933-de49-400b-b859-c9dde6361151 - WS: OnMessage({"C":"d-
69A14839-B,0|C,0|D,1|E,0","S":1,"M":[]})
07:56:28.0277722 - 355ca933-de49-400b-b859-c9dde6361151 - ChangeState(Connecting
, Connected)
07:56:33.4655493 - 355ca933-de49-400b-b859-c9dde6361151 - WS: OnMessage({"C":"d-
69A14839-B,1|C,0|D,1|E,0","M":[{"H":"MyHub","M":"addMessage","A":["Server","Hello World"]}]}
)
07:56:37.9657773 - 355ca933-de49-400b-b859-c9dde6361151 - WS: OnMessage({})
07:56:47.9975354 - 355ca933-de49-400b-b859-c9dde6361151 - WS: OnMessage({})
「Server」と「HelloWorld」はサーバーから送信されているメッセージなので、クライアントがメッセージを受信していると思います。おそらく、コンソールに間違った方法で出力しているだけです。
誰か助けてもらえますか?
追加情報:MVCアプリケーションでメッセージを正常に受信できます。
このようにhubProxyイベントハンドラーを宣言するべきではありませんか?
hubProxy.On<string, string>("Send", (name, message) =>
{
Console.WriteLine("Incoming data: {0} {1}", name, message);
});