Mys*_*Blu 8 asp.net signalr signalr-hub angular
我正在尝试在 ASP.NET(不是 Core)和 Angular(当前为 10)应用程序中实现 SignalR。Startup.cs 使用 Owin。
我能找到的每个文档或示例要么适用于 ASP.NET Core,要么没有使用 Angular,所以有人可以为我指出一个好的方向吗?
我能找到的最接近这个组合的是这个指南: https: //www.c-sharpcorner.com/article/asp-net-signalr-angular2-and-typescript-real-time-clock/,但是我不断得到“无法读取未定义的属性“hubConnection””错误,可能是因为自从我开始使用 Angular 7 及更高版本以来,我不明白“$”在 SignalRService 类中做什么。
任何帮助将不胜感激。
Jek*_*Jek 10
您可以使用此链接中的示例SignalR using Angular 10
脚步:
npm 我@microsoft/signalr@latest --save
从 '@microsoft/signalr' 导入 { HubConnection, HubConnectionBuilder, LogLevel };
Run Code Online (Sandbox Code Playgroud)this._hubConnection = new HubConnectionBuilder() .withUrl('http://localhost:52864/chathub') .build();
Run Code Online (Sandbox Code Playgroud)this._hubConnection.on('MessageReceived', (message) => { console.log(message); });
Run Code Online (Sandbox Code Playgroud)this._hubConnection.start() .then(() => console.log('connection started')) .catch((err) => console.log('error while establishing signalr connection: ' + err));
虚拟示例如下所示:
import { Component, OnInit } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { HubConnection, HubConnectionBuilder, LogLevel } from '@microsoft/signalr';
@Component({
selector: 'app-messaging',
templateUrl: './messaging.component.html',
styleUrls: ['./messaging.component.scss']
})
export class MessagingComponent implements OnInit {
private _hubConnection: HubConnection;
constructor(private _httpClient: HttpClient) { }
ngOnInit(): void {
this.connect();
}
public onSendButtonClick(): void {
this._hubConnection.send('SendMessage', 'test message').then(r => { });
}
private connect(): void {
this._hubConnection = new HubConnectionBuilder()
.withUrl('http://localhost:52864/chathub')
.build();
this._hubConnection.on('MessageReceived', (message) => {
console.log(message);
});
this._hubConnection.start()
.then(() => console.log('connection started'))
.catch((err) => console.log('error while establishing signalr connection: ' + err));
}
}
Run Code Online (Sandbox Code Playgroud)
注意:无需安装“signalr-protocol-msgpack”
旧的(非核心)SignalR javascript 客户端依赖于 jQuery。因此,在 Angular 应用程序中添加对 SignalR 支持的最佳方法是首先
将 jquery 和 signalr npm 包添加到您的项目中
npm 安装 jquery signalr --save
添加 @types/jquery 和 @types/signalr npm 包,以支持这两个包的输入。
npm install @types/jquery @types/signalr --save-dev
编辑 angular.json 文件projects/[projectname]/architect/build/scripts 节点以包含 jquery 和 signalr 脚本(请参阅下面的完整文件示例)
“脚本”:[“./node_modules/jquery/dist/jquery.min.js”,“./node_modules/signalr/jquery.signalR.js”]
编辑 tsconfig.app.json 文件并将“jquery”、“signalr”添加到“compilerOptions”/“types”列表中。(请参阅下面的完整文件示例)
这是 angular.json 的样子(这里的项目名称是 signalr demo)
{
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
"version": 1,
"newProjectRoot": "projects",
"projects": {
"signalrdemo": {
"projectType": "application",
"schematics": {},
"root": "",
"sourceRoot": "src",
"prefix": "app",
"architect": {
"build": {
"builder": "@angular-devkit/build-angular:browser",
"options": {
"outputPath": "dist/signalrdemo",
"index": "src/index.html",
"main": "src/main.ts",
"polyfills": "src/polyfills.ts",
"tsConfig": "tsconfig.app.json",
"aot": true,
"assets": [
"src/favicon.ico",
"src/assets"
],
"styles": [
"src/styles.css"
],
"scripts": [
"./node_modules/jquery/dist/jquery.min.js",
"./node_modules/signalr/jquery.signalR.js"
]
},
"configurations": {
"production": {
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.prod.ts"
}
],
"optimization": true,
"outputHashing": "all",
"sourceMap": false,
"extractCss": true,
"namedChunks": false,
"extractLicenses": true,
"vendorChunk": false,
"buildOptimizer": true,
"budgets": [
{
"type": "initial",
"maximumWarning": "2mb",
"maximumError": "5mb"
},
{
"type": "anyComponentStyle",
"maximumWarning": "6kb",
"maximumError": "10kb"
}
]
}
}
},
"serve": {
"builder": "@angular-devkit/build-angular:dev-server",
"options": {
"browserTarget": "signalrdemo:build"
},
"configurations": {
"production": {
"browserTarget": "signalrdemo:build:production"
}
}
},
"extract-i18n": {
"builder": "@angular-devkit/build-angular:extract-i18n",
"options": {
"browserTarget": "signalrdemo:build"
}
},
"test": {
"builder": "@angular-devkit/build-angular:karma",
"options": {
"main": "src/test.ts",
"polyfills": "src/polyfills.ts",
"tsConfig": "tsconfig.spec.json",
"karmaConfig": "karma.conf.js",
"assets": [
"src/favicon.ico",
"src/assets"
],
"styles": [
"src/styles.css"
],
"scripts": []
}
},
"lint": {
"builder": "@angular-devkit/build-angular:tslint",
"options": {
"tsConfig": [
"tsconfig.app.json",
"tsconfig.spec.json",
"e2e/tsconfig.json"
],
"exclude": [
"**/node_modules/**"
]
}
},
"e2e": {
"builder": "@angular-devkit/build-angular:protractor",
"options": {
"protractorConfig": "e2e/protractor.conf.js",
"devServerTarget": "signalrdemo:serve"
},
"configurations": {
"production": {
"devServerTarget": "signalrdemo:serve:production"
}
}
}
}
}},
"defaultProject": "signalrdemo"
}
Run Code Online (Sandbox Code Playgroud)
tsconfig.app.json 应该是这样的:
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "./out-tsc/app",
"types": ["jquery","signalr"]
},
"files": [
"src/main.ts",
"src/polyfills.ts"
],
"include": [
"src/**/*.d.ts"
]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13514 次 |
| 最近记录: |