【问题标题】:How to enable JsonP on Azure mobile service .Net backend with SignalR如何使用 SignalR 在 Azure 移动服务 .Net 后端启用 JsonP
【发布时间】:2016-08-11 18:54:41
【问题描述】:

我正在尝试从 Apache Cordova 应用程序访问托管在 Azure 移动服务中的 SignalR,在启动集线器连接时出现错误 403 Forbidden: JSONP is disabled at the negotiating request with web socket protocol。 我尝试如下添加 EnableJsonP,但仍然出现相同的问题,是否有任何其他方法可以为 azure 托管的移动服务启用 jsonp。

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;
    }
}

【问题讨论】:

    标签: cordova cors signalr jsonp azure-mobile-services


    【解决方案1】:

    使用 Azure 移动有两种不同的方式 - 应用服务和移动服务。如果您在经典门户中进行配置 (https://manage.windowsazure.com),那么您正在使用移动服务。如果不是,则您在应用服务中。基于这个问题,我认为您正在使用移动服务,因此如果您仍在开发中,我建议您升级 - 改用应用服务!

    应用服务不会对 SignalR 做任何特别的事情,所以所有“正常”的 SignalR 东西都应该可以正常工作。您可以查看此链接以“正常”方式执行 SignalR:signalR CORS - IE client gets 403 'Forbidden: JSONP is disabled'

    移动服务不同。我们为 SignalR 做了很多事情。看起来您正在调用移动服务来初始化 SignalR,然后尝试自己初始化它。我不确定那里会发生什么,但可能无法正确连接。

    同样,如果您使用的是移动服务,那么我建议您升级到 Azure 应用服务移动应用。有 SDK 版本更改,但移动应用程序不会对 SignalR 做任何事情,所以一切都会以正常方式为您工作。

    【讨论】:

    • 感谢您的建议,使用应用服务移动应用程序,它可以正常工作。但经常(每 3 次,共 4 次)我在尝试从cordova应用程序连接它,根据文档,我什至检查了通过协商和启动请求传递的连接ID是否相同(我得到错误响应)。我的是一个没有任何身份验证的简单示例,我没有指定任何内容与服务器端的身份验证相关我刚刚在启动时启用了cors,这是cordova应用程序所需的。知道为什么我会得到这个吗?
    • 不是我的头顶,但我不是 SignalR 专家。我建议发布一个带有 signalr 标记的附加问题,以便专家查看您的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多