SignalR Authorize被多次调用

时间:2016-09-08 22:09:34

标签: c# asp.net signalr authorize-attribute

我正在尝试跟踪连接的用户到我的中心。 我尝试这样做的方法是为我的集线器创建自定义Authorize属性,并检查尝试连接的用户。如果用户已连接,则集线器不会授权连接

    char *line;
    int  eofreached; // pay attention
    eofreached = 0;// pay attention
while(eofreached == 0)// pay attention
{
    line = readline(fd, MAX_INPUT_LENGTH, &eofreached);// pay attention

    /*IF all lines have been read then break off the loop, basically determine EOF ?*

    //text processing on the line

}

/* Utility function to read lines of unknown lengths */
char *readline(FILE* fp, int max_length, int* eof_found)// pay attention
{
    //The size is extended by the input with the value of the provisional
    char *str;
    int ch;
    int len = 0;
    int current_max = max_length;

    str = (char*)malloc(sizeof(char)*current_max);
    if(!str)
        return str;

    while((char)(ch = fgetc(fp))!='\n' && ch != EOF)
    {
        str[len++] = ch;
        if(len == current_max)
        {
            current_max = current_max + max_length;
            str = realloc(str, sizeof(char)*current_max);
            if(!str)
                return str;
        }
    }
    if ( ch == EOF )    // pay attention // this line and next line
        *eof_found = 1; // pay attention // can be improved: *eof_found = ch == EOF
    str[len] = '\0';

    return str;
}

如果每个连接只调用一次AuthorizeHubConnection方法,那么这将正常工作,但这不是正在发生的事情。

当我加载试图与集线器连接的页面时,AuthorizeHubConnection奇怪地运行多次,它运行的次数并不总是相同的,有时它是5,有些是3,我真的不知道是什么可能会导致它。

你知道什么可能导致AuthorizeHubConnection被多次调用吗?

1 个答案:

答案 0 :(得分:3)

每次SignalR服务器收到HTTP请求之前都会调用授权(参见:https://github.com/SignalR/SignalR/blob/dev/src/Microsoft.AspNet.SignalR.Core/PersistentConnection.cs#L161)。当SignalR维持逻辑上持久的连接时,它在后台发出多个HTTP请求。使用Websockets传输时,通常在启动连接(对于协商,连接和启动请求)和每次重新连接时只能看到其中的3个。 longPolling和serverSentEvents传输每次发送数据(发送)时都会创建一个HTTP请求。此外,longPolling创建一个轮询HTTP请求来接收数据(轮询)。必须授权这些请求中的每一个,因此这就是您看到对AuthorizeHubConnection方法的多次调用的原因。