कुछ उपयोगकर्ताओं के लिए कनेक्ट करने का प्रयास करते समय सिग्नलआर मुझे 404 देता है। एक्सेस_टोकन को छोड़कर यूआरएल समान हैं।

यह प्रति उपयोगकर्ता स्थिर प्रतिलिपि प्रस्तुत करने योग्य है (मेरा मतलब है कि कुछ उपयोगकर्ता स्थिर हैं ठीक है, कुछ उपयोगकर्ता स्थिर 404 हैं)।

Access_token पार्स किए गए jwt diff (बाएं ठीक उपयोगकर्ता है, दाएं 404 हो जाता है): access_token parsed jwt diff


मैंने लॉग का एक ट्रेस स्तर किया और अगला है: ठीक उपयोगकर्ता के लिए: TRACE कंसोल.लॉग फॉर ओके यूजर

404 प्राप्त करने वाले उपयोगकर्ता के लिए: TRACE console.log for 404 user

नोट: काले वर्गों के अंतर्गत URL समान हैं।


फ्रंट एंड एंगुलर 9 पैकेज के साथ है "@microsoft/signalr": "^3.1.8", और यहां वह कोड है जो कनेक्शन बनाता है:

  private buildHub(): HubConnection {
    console.log(this.authService.accessToken);
    let builder = new HubConnectionBuilder()
                      .withAutomaticReconnect()
                      .configureLogging(LogLevel.Information)
                      .withUrl('ws/notificationHub', {
                          accessTokenFactory: () => this.authService.accessToken
                        });

    if (this.debugMode) {
      builder = builder.configureLogging(LogLevel.Trace);
    }

    return builder.build();
  }

सिग्नलआर हब को कॉन्फ़िगर करने के लिए बैकएंड स्टार्टअप में अगले कोड का उपयोग कर रहा है:

public void ConfigureServices(IServiceCollection services) में:

services.AddSignalR()
            .AddJsonProtocol(options =>
            {
                options.PayloadSerializerSettings.ContractResolver = new DefaultContractResolver();
            });

public void Configure(IApplicationBuilder app, IHostingEnvironment env) में:

app.UseSignalR(route =>
            {
                route.MapHub<NotificationHub>("/ws/notificationHub");
            });

इसके अलावा हम कस्टम प्रमाणीकरण का उपयोग करते हैं, इसलिए हमारे पास हब वर्ग के लिए Authorize विशेषता है:

    [Authorize]
    public class NotificationHub: Hub<INotificationHubClient>

और यह कोड public void ConfigureServices(IServiceCollection services) में:

services.AddAuthentication(IdentityServerAuthenticationDefaults.AuthenticationScheme)
                .AddJwtBearer(options =>
                {
                    options.Authority = identityServerSettings.Url;
                    options.Audience = identityServerSettings.ApiScopeName;
                    options.RequireHttpsMetadata = identityServerSettings.RequireHttpsMetadata;

                    options.Events = new Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerEvents
                    {
                        OnMessageReceived = context =>
                        {
                            var accessToken = context.Request.Query["access_token"];
                            var path = context.HttpContext.Request.Path;
                            if (!string.IsNullOrEmpty(accessToken) && path.StartsWithSegments("/ws"))
                            {
                                context.Token = accessToken;
                            }
                            return Task.CompletedTask;
                        }
                    };
                });

दुर्भाग्य से, मेरे पास उस वातावरण तक पूर्ण पहुंच नहीं है जहां यह प्रतिलिपि प्रस्तुत करने योग्य है, लेकिन मैं किसी भी सेटिंग को देखने या कुछ बदलाव करने का प्रयास करने का अनुरोध कर सकता हूं।

मैं समस्या के निवारण के लिए और क्या प्रयास कर सकता हूँ?


अद्यतन करें: बातचीत दोनों उपयोगकर्ताओं के लिए ठीक है।

2
A. Yushchenko 5 अक्टूबर 2020, 13:45

1 उत्तर

सबसे बढ़िया उत्तर

मेरे जेडब्ल्यूटी के आकार में वृद्धि के बाद हाल ही में मुझे यह समस्या थी। मैंने पाया कि मेरे मामले में आईआईएस द्वारा 404 त्रुटि फेंकी जा रही थी क्योंकि क्वेरी स्ट्रिंग 2048 की सीमा से अधिक हो गई थी। क्वेरी स्ट्रिंग अधिकतम लंबाई बढ़ाने के बाद, मेरी समस्या हल हो गई थी।

1
Sparviero 13 अक्टूबर 2020, 07:14