代码之家  ›  专栏  ›  技术社区  ›  JSON

信号机在角度上的正确客户端配置是什么?

  •  2
  • JSON  · 技术社区  · 6 年前

    我正在使用Angular和ASP.NET核心2.1.3作为后端。我添加了singalr配置。一个包,如下所示:

    services.addSignal((huboOptions)=>。{
    huboOptions.EnableDetailedErrors=true;
    //hubooptions.keepaliveInterval=TimeSpan.FromMinutes(1);
    })
    .addjsonProtocol(选项=>){
    选项.payloadSerializerSettings.ContractResolver=
    new defaultContractResolver();
    }).AddHubOptions<ChatHub>(选项=>){
    options.enableDetailedErrors=true;
    (});
    
    app.useSignal(路由=>){
    routes.maphub<chathub>(“/api/crud”);
    (});
    < /代码> 
    
    

    对于Angular,我使用的是“@aspnet/signal”:“^1.0.2”,

    我的问题在于客户端配置。如果连接在开始前至少持续一分钟,

    我正在使用服务启动连接,然后订阅组件中的值,

    这是我的服务,

    @injectable()。
    导出类信号服务{
    值=new subject();
    connectionEstablished=新建主题<布尔值>();
    专用轮毂连接:轮毂连接;
    private baseurl:string=null;
    
    构造函数(private configservice:configservice){
    this.baseurl=this.configService.getapuri();
    this.createConnection(“crud”);
    this.startConnection();
    this.registeronServerEvents();
    }
    
    公共CreateConnection(HubendPoit){
    this.hubConnection=新建hubConnectionBuilder()
    .withurl(this.baseurl+hubendpoit)
    .configurelogging(signal.loglevel.information)
    Bug();
    }
    
    private startconnection():无效{
    此.hub连接
    启动()
    。然后(()=>){
    console.log(“已启动集线器连接”);
    this.connectionestablished.next(真);
    })
    .catch(错误=>){
    console.log('建立连接时出错,正在重试…',err);
    setTimeout(this.startConnection(),5000);
    (});
    }
    
    private registeronServerEvents():无效{
    this.hubconnection.on('receiveMessage',(data:any)=>。{
    this.value.next(数据);
    (});
    }
    }
    < /代码> 
    
    

    为什么我会收到我的连接首先被规范化,并且正确的连接至少在它开始之前持续一分钟?

    更新

    似乎我有一个WebSocket问题,信号器无法解决,如上面的错误所示,wss://www.artngcore.com:4200/api/crud?id=0_gi7io5ifn1sov5akfxw

    我让它工作的唯一方法是指定传输协议,

    public createConnection(hubendpoit){
    this.hubConnection=新建hubConnectionBuilder()
    .withurl(this.baseurl+hubendpoit,signal.httptransporttype.serversentevents)
    .configurelogging(signal.loglevel.information)
    Bug();
    }
    < /代码> 
    
    

    如何解决WebSocket问题?

    对于角度,我使用"@aspnet/signalr": "^1.0.2",

    我的问题在于客户端配置。如果连接在开始前至少持续一分钟,

    enter image description here

    我正在使用服务启动连接,然后订阅组件中的值,

    这是我的服务,

    @Injectable()
    export class SignalRService {
      value = new Subject();
      connectionEstablished = new Subject<Boolean>();
      private hubConnection: HubConnection;
      private baseUrl: string = null;
    
      constructor(private configService: ConfigService) {
        this.baseUrl = this.configService.getApiURI();
        this.createConnection('CRUD');
        this.startConnection();
        this.registerOnServerEvents();
      }
    
      public createConnection(hubEndPoit) {
        this.hubConnection = new HubConnectionBuilder()
          .withUrl(this.baseUrl + hubEndPoit)
          .configureLogging(signalR.LogLevel.Information)
          .build();
      }
    
      private startConnection(): void {
        this.hubConnection
          .start()
          .then(() => {
            console.log('Hub connection started');
            this.connectionEstablished.next(true);
          })
          .catch(err => {
            console.log('Error while establishing connection, retrying...', err);
            setTimeout(this.startConnection(), 5000);
          });
      }
    
      private registerOnServerEvents(): void {
        this.hubConnection.on('ReceiveMessage', (data: any) => {
          this.value.next(data);
        });
      }
    }
    

    为什么我会收到我的连接首先被规范化,并且正确的连接至少在它开始之前持续一分钟?

    更新

    似乎我有一个WebSocket问题,信号器无法解决,如上面的错误所示,wss://www.artngcore.com:4200/api/CRUD?id=0_uGI7io5iFN1SOv5Akfxw

    我让它工作的唯一方法是指定传输协议,

     public createConnection(hubEndPoit) {
        this.hubConnection = new HubConnectionBuilder()
          .withUrl(this.baseUrl + hubEndPoit, signalR.HttpTransportType.ServerSentEvents)
          .configureLogging(signalR.LogLevel.Information)
          .build();
      }
    

    如何解决WebSocket问题?

    2 回复  |  直到 6 年前
        1
  •  2
  •   Wendell    6 年前

    假设您已经实现了文档中演示的信号器: Getting Started with SignalR on ASP.NET Core ,您可能还需要配置主机服务器的配置。在我的例子中,我使用的是nginx,我必须为信号集线器配置代理: SignalR Hubs Reverse Proxy configuraton

        2
  •  0
  •   JSON    6 年前

    好的,整理一下。 对于我的角度来说,我使用代理来区分HTTP请求,因为我没有得到404响应,所以我不够无知,没有考虑它。

     "/api": {
        "target": {
          "host": "localhost",
          "protocol": "https:",
          "port": 5001
        },
        "secure": false,
        "logLevel": "debug",
        "changeOrigin": true
      },
    

    所以我把路线改为:

     app.UseSignalR(routes => {
                    routes.MapHub<ChatHub>("/hub/CRUD");
                });
    

    我的客户电话,

    public createConnection(hubEndPoit) {
        this.hubConnection = new HubConnectionBuilder()
            .withUrl('https://localhost:5001/' + 'hub/' + hubEndPoit)
          .configureLogging(signalR.LogLevel.Information)
          .build();
      }