如何"了解"未记录的SignalR服务器?

hri*_*ayz 5 c# signalr

我正在编写ac#console客户端来连接服务器的SignalR服务.使用一些Wiresharking,Firebugging并检查服务器上的.../signalr/hubs文档,我能够连接默认的"/ signalr"URL:

    var connection = new HubConnection("https://www.website.com");
    var defaultHub = connection.CreateHubProxy("liveOfferHub");

    connection.Start().ContinueWith(task =>
    {
        if (task.IsFaulted)
        {
            Console.WriteLine("Error opening the connection:" + task.Exception.GetBaseException());
        }
        else
        {
            Console.WriteLine("SignalR Connected");
        }
    }).Wait();
Run Code Online (Sandbox Code Playgroud)

现在我需要找出答案

  • 服务器上可以连接哪些集线器?(询问他们的清单)
  • 我可以在集线器上调用哪些方法?(询问他们的清单)
  • 我可以订阅哪些服务?我将要处理的事件的名称是什么,以及我将要接收的对象的类别是什么?

IHubManager接口或HubManagerExtensions类看好,但我并不甚至能找出什么类实现它,以及如何使用它.Asp.net/signalr仅提供基本文档和教程.

提前感谢您指出我正确的方向!

Flo*_*cal 3

我认为您正在寻找类似WSDL 的东西之类的东西。

不,SignalR 没有那么复杂的东西。您可以从 SignalR 代理手动获取:./signalr/hubs

如果您从代理查看此代码

proxies.chatHub = this.createHubProxy('chatHub'); //hub name
proxies.chatHub.client = { };
proxies.chatHub.server = {
    serverMethod: function (firstParameter, secondParameter, thridParameter) { //hub method and number of parameters
        return proxies.chatHub.invoke.apply(proxies.chatHub, $.merge(["ServerMethod"], $.makeArray(arguments)));
     }
};
Run Code Online (Sandbox Code Playgroud)

您仅获得:
- 集线器名称 ( chatHub)
- 服务器方法和参数数量 (serverMethod , 3 个参数)

所以,唯一的信息是你的集线器看起来像这样:

[HubName("chatHub")]
public class ?? : Hub
{
    public ?? ServerMethod(?? firstParameter, ?? secondParameter, ?? thridParameter)
    {
        ??
    }
}
Run Code Online (Sandbox Code Playgroud)

客户端方法实际上并不在任何列表中,而是即时使用的。您可以使用Fiddler捕获它们。