我只是想让 SignalR 设置运行 owin 托管,我想通过 JavaScript 客户端连接。应该很容易吧?我能够快速设置并运行 SignalR 服务器,并将客户端连接到服务器。但是,当在客户端调用 done 回调时,我尝试调用集线器 Send 方法,并且在控制台中收到以下错误:
XMLHttpRequest 无法加载http://localhost:8199/signalr/signalr/send?transport=serverSentEvents& clien …AxBg6iaFwlK50s2DnurE&connectionData=%5B%7B%22name%22%3A%22testhub%22%7D%5D。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问Origin ' http://localhost '。响应的 HTTP 状态代码为 500。
这是我的服务器端代码:
public static IAppBuilder UseService(this IAppBuilder app)
{
log4net.Config.XmlConfigurator.Configure();
app.UseService(NinjectConfig.CreateKernel);
app.UseLogging();
app.UseSignalr();
return app;
}
Run Code Online (Sandbox Code Playgroud)
internal static IAppBuilder UseSignalr(this IAppBuilder app)
{
app.Map("/signalr", map =>
{
map.UseCors(CorsOptions.AllowAll);
var hubConfig = new HubConfiguration {EnableDetailedErrors = true};
map.RunSignalR(hubConfig);
}
);
return app;
}
Run Code Online (Sandbox Code Playgroud)
这是客户端:
var connection = $.hubConnection('http://localhost:8199/signalr');
var testHub = connection.createHubProxy('testHub');
testHub.on('addMessage', function(name){
console.log(name);
});
connection.start().done(function () …Run Code Online (Sandbox Code Playgroud) 使用反应形式并在推送时进行更改检测。
我一直在SO中搜寻如何做这个例子,我觉得这很普遍,但是,我似乎找不到如何正确地做一个好例子。
尝试更新包含在ngOnInit内的订阅中的FormGroup列表的FormArray时,将更新FormArray对象,但除非在组件上强制进行更改检测,否则视图将不会更新FormArray组。以这种方式更新的所有其他控件都在工作。因此,感觉就像我尝试更新FormArray是错误的,并且我不应该并且不想强制更改检测。
import { Component, OnInit, ChangeDetectionStrategy } from "@angular/core";
import { JournalTransactionService } from "app/accounting/shared-services/journal-transaction.service";
import { JournalEntry } from "accountingModels";
import { FormBuilder, FormGroup, FormArray } from "@angular/forms";
import { EntryLine } from "app/accounting/models/journal";
@Component({
selector: "general-journal",
templateUrl: "./general-journal.component.html",
styleUrls: ["./general-journal.component.scss"],
changeDetection: ChangeDetectionStrategy.OnPush
})
export class GeneralJournalComponent implements OnInit {
journalEntry: JournalEntry;
journalEntryForm: FormGroup;
constructor(private _journalTransactionService: JournalTransactionService, private _formBuilder: FormBuilder) { }
get entryLines(): FormArray {
return <FormArray>this.journalEntryForm.get("entryLines");
};
ngOnInit() {
this.journalEntryForm = this._formBuilder.group(
{
transactionId: "", …Run Code Online (Sandbox Code Playgroud)