SignalRが非常に新しくなったので、実際には数日間しか使用していません。ネゴシエートしようとしたときにSignalR 404エラーが発生する
問題のアプリケーションのためのコードは二つのプロジェクト、ウェブAPIおよび単一ページのアプリケーション(SPA)に位置しています:私のアプリケーションは、最初の起動時にとにかく、私は下のエラーを取得しています。最初のものにはバックエンドコード(C#)があり、もう1つはクライアントサイドコード(AngularJS)です。この問題は、問題のプロジェクトが別のポートで実行されていることが原因と考えられます。私のSignalRハブ生活のWeb APIは、ポート60161上にあり、SPAは60813.上にある私のハブはそのように宣言されています
public class ReportHub : Hub
{
public void SendReportProgress(IList<ReportProgress> reportProgress)
{
this.Clients.All.broadcastReportProgress(reportProgress);
}
public override Task OnConnected()
{
this.Clients.All.newConnection();
return base.OnConnected();
}
}
、その後、私のWeb APIのための私のStartup.csファイルに私はSignalRを初期化しますこのように:私のクライアント側のコードの場合
public void Configuration(IAppBuilder app)
{
HttpConfiguration config = new HttpConfiguration();
config.Services.Replace(typeof(IHttpControllerActivator), new NinjectFactory());
config.MessageHandlers.Add(new MessageHandler());
//set up OAuth and Cors
this.ConfigureOAuth(app);
config.EnableCors();
config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
// Setting up SignalR
app.Map("/signalr", map =>
{
map.UseCors(CorsOptions.AllowAll);
map.RunSignalR(new HubConfiguration { EnableJSONP = true });
});
//set up json formatters
FormatterConfig.RegisterFormatters(config.Formatters);
WebApiConfig.Register(config);
app.UseWebApi(config);
}
私は角signalRのAPIを使用します(Angular-signalr-hub)アンギュラsignalrハブと呼ばれます。クライアント側は、次のとおりです。
angular
.module("mainApp")
.factory("reportHubService", ["$rootScope", "Hub", reportHubService]);
/// The factory function
function reportHubService($rootScope, Hub) {
var vm = this;
vm.reportName = "None";
// Setting up the SignalR hub
var hub = new Hub("reportHub", {
listeners: {
'newConnection': function(id) {
vm.reportName = "SignalR connected!";
$rootScope.$apply();
},
'broadcastReportProgress': function (reportProgress) {
vm.reportName = reportProgress.reportName;
$rootScope.$apply();
}
},
errorHandler: function(error) {
},
hubDisconnected: function() {
if (hub.connection.lastError) {
hub.connection.start();
}
},
transport: 'webSockets',
logging: true
//rootPath: 'http://localhost:60161/signalr'
});
Iやったいくつかの昨日、私が来た時に候補の1つ(上記のコメントアウト行)私は私のウェブAPIの1つにSignalR URLを設定したグーグル。
と私は自分のアプリケーションを実行します。私は今、私のブラウザでhttp://localhost:60161/signalr/hubsに行けば、それは私に、動的に生成されたプロキシファイルを示していたので、私は何かをするように見えるん問題の行を、コメントを解除する場合私はもはや上記のエラーを取得しませんが、今は接続していないようです。それは交渉の行に取得し、それはそこに停止します。
私はそれがこの(これは私が見つけたSignalRのチュートリアルからである)ようになっているはずだと思う。また
、上記のAngularコードで宣言されているリスナーは誰も呼ばれません。ログには、接続が正常に確立されたなどの理由で、より多くの行が存在するはずです。ここで何が問題になる可能性がありますか?
UPDATE:さらに、デバッグ時に、私は、問題を見つけた可能性が高いはprotocolVersionプロパティは、ここでクライアントと結果の間で異なることに起因している。そのため
それはそれです存在し、接続を確立できません。
何が原因で問題が発生している可能性がありますか? – lukegf