Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 信号器:无法访问默认集线器方法_C#_Asp.net Mvc_Angular_Asp.net Core_Signalr - Fatal编程技术网

C# 信号器:无法访问默认集线器方法

C# 信号器:无法访问默认集线器方法,c#,asp.net-mvc,angular,asp.net-core,signalr,C#,Asp.net Mvc,Angular,Asp.net Core,Signalr,在我的Angular项目中,在我的项目中使用名为IDemoHubTypedClient的TypedHub接口,如下所示: IDemoHubTypedClient: 但是,由于我是从集线器而不是集线器继承的,因此我无法访问默认的集线器方法,即如下所示的SendAsync,而只能访问IDemoHubTypedClient中的方法,即BroadcastData和SendMessageToClient。由于我需要使用此结构来使用DI和TypedHub,如何解决此问题?我应该在IDemoHubTypedC

在我的Angular项目中,在我的项目中使用名为IDemoHubTypedClient的TypedHub接口,如下所示:

IDemoHubTypedClient:

但是,由于我是从集线器而不是集线器继承的,因此我无法访问默认的集线器方法,即如下所示的SendAsync,而只能访问IDemoHubTypedClient中的方法,即BroadcastData和SendMessageToClient。由于我需要使用此结构来使用DI和TypedHub,如何解决此问题?我应该在IDemoHubTypedClient中添加所有集线器方法SendAsync等吗?正如你们所知,只有这些方法的封条,因为它们在客户端,我称之为BroadcastData方法,而这个方法实际上在客户端。有什么想法吗

DemoHub:


没那么容易。您需要有一个signarconnectionmanager就绪依赖项注入,并从中获取一个类型化的HubContext,然后您可以访问给定的Hub函数。
请参阅此处的更多信息:

如果要使用强类型中心,我认为必须在接口上定义所有客户端方法。另外,在强类型中心和普通中心之间没有混合和匹配的方法。如果您有这样的客户:

this.connection.on('receiveMessage', (message: string) => {
    // Do things
});

this.connection.on('receiveData', (data: MyData, message: string) => {
    // Do things
});
然后,如果要使用强类型集线器,则必须使用使用相同名称和签名的方法定义强类型集线器接口。方法名称不区分大小写:

public interface IDemoClient
{
    Task ReceiveMessage(string message);
    Task ReceiveData(MyData data, string message);
}

优点是,您可以编写wait Clients.All.ReceiveMessageHello,来自服务器!不要等待Clients.All.SendAsyncReceiveMessage,而是从服务器!向您问好!。关键在于,您不必硬编码客户机方法名称,并且可以对方法参数进行额外的静态类型检查。

非常好的解释,非常感谢。İ在这种情况下,我使用上面提到的方法。当做
this.connection.on('receiveMessage', (message: string) => {
    // Do things
});

this.connection.on('receiveData', (data: MyData, message: string) => {
    // Do things
});
public interface IDemoClient
{
    Task ReceiveMessage(string message);
    Task ReceiveData(MyData data, string message);
}