2016-04-19 10 views
0

Apache CordovaアプリからAzureモバイルサービスでホストされているSignalRにアクセスしようとしていますが、ハブ接続を開始するときにエラー403が発生します。 Webソケットプロトコルによる要求のネゴシエーション。 私は以下のようにEnableJsonPを追加しようとしましたが、それでも同じ問題が発生します。空白のホストされたモバイルサービスを有効にするための他の方法はありますか?AzureモバイルサービスでJsonPを有効にする方法SignalRを使用した.Netバックエンド

public static class WebApiConfig 
{ 
    public static void Register() 
    { 
     SignalRExtensionConfig.Initialize(); 

     // Use this class to set configuration options for your mobile service 
     ConfigOptions options = new ConfigOptions(); 
     options.SetRealtimeAuthorization(AuthorizationLevel.Anonymous); 

     //// Use this class to set WebAPI configuration options 
     var configBuilder = new ConfigBuilder(options, (httpconfig, ioc) => 
     { 
      ioc.RegisterInstance(new CORSSignalROwinAppBuilderExtension(httpconfig)).As<IOwinAppBuilderExtension>(); 
     }); 
     HttpConfiguration config = ServiceConfig.Initialize(configBuilder); 
     config.Formatters.JsonFormatter.SerializerSettings.DefaultValueHandling = Newtonsoft.Json.DefaultValueHandling.Include; 
     config.Formatters.JsonFormatter.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Include; 

     Database.SetInitializer(new snackappmobileInitializer()); 
    } 
} 

internal class CORSSignalROwinAppBuilderExtension : OwinAppBuilderExtension 
{ 
    private HttpConfiguration httpconfig; 

    protected override void ConfigureSignalR(IAppBuilder appBuilder) 
    { 
     appBuilder.Map("/signalr", map => 
     { 
      var hubConfiguration = new HubConfiguration 
      { 
       EnableJSONP = true 
      }; 
      map.RunSignalR(hubConfiguration); 
     }); 
     base.ConfigureSignalR(appBuilder); 
    } 

    public CORSSignalROwinAppBuilderExtension(HttpConfiguration httpconfig) : base(httpconfig) 
    { 
     this.httpconfig = httpconfig; 
    } 
} 

答えて

0

Azure Mobile-Appサービスとモバイルサービスを使用する2つの方法があります。あなたがクラシックポータルで(https://manage.windowsazure.com)のものを設定する場合は、モバイルサービスを使用しています。そうでなければ、あなたはApp Serviceにいます。この質問に基づいて、あなたはモバイルサービスを使用していると私は考えているので、まだ開発中の場合はアップグレードをお勧めします。代わりにApp Serviceを使用してください。

App ServiceはSignalRに特別なことをしません。したがって、すべての「通常の」SignalRは機能します。このリンクをチェックして、SignalRを「通常の」方法で実行することができます。signalR CORS - IE client gets 403 'Forbidden: JSONP is disabled'

モバイルサービスは異なります。私たちはSignalRのためにたくさんのことを結びつけています。あなたがMobileRを呼び出して、SignalRを初期化してから自分で初期化しようとしているようです。私はそこで何が起こるかは分かりませんが、何かが適切に配線されない可能性があります。

また、モバイルサービスをご利用の場合は、Azure App Service Mobile Appsにアップグレードすることをお勧めします。 SDKのバージョンが変更されていますが、モバイルアプリはSignalRで何もしないので、正常に動作します。

+0

appサービスのモバイルアプリでは、通常の方法で動作しますが、頻繁に(4回に3回)エラーコード "Connectionid is incorrect format"がコードワから接続しようとしていますアプリケーションでは、ドキュメントごとに、私は接続IDがネゴシエートして渡され、リクエストが開始されたことを確認しました(エラーが発生した場合).Mineは認証なしの簡単なサンプルです。サーバー側私はちょうどcordovaアプリに必要な起動時にcorsを有効にしました。なぜ私はこれを得る任意のアイデア? – KNara

+0

私の頭の上ではないが、私はSignalRの専門家ではない。専門家があなたのコードを見ることができるように、signalrでタグ付けされた追加の質問を投稿することをお勧めします。 –

関連する問題