Azure WebJobs ServiceBus 返回异常:在授权上下文中找到 2 个 DNS 声明

Posted

技术标签:

【中文标题】Azure WebJobs ServiceBus 返回异常:在授权上下文中找到 2 个 DNS 声明【英文标题】:Azure WebJobs ServiceBus returns Exception: found 2 DNS claims in authorization context 【发布时间】:2016-03-23 14:16:33 【问题描述】:

我正在尝试使用 Azure WebJob 从 Azure ServiceBus 队列中读取消息,但它正在抛出异常:

Unhandled Exception: System.InvalidOperationException: Found 2 DNS claims in authorization context.

我设置了名为“AzureWebJobsServiceBus”、“AzureWebJobsDashboard”和“AzureWebJobsStorage”的正确连接字符串

WebJob 程序代码已更新为使用 JobHostConfiguration:

class Program

    static void Main()
    
        var config = new JobHostConfiguration();
        config.UseServiceBus();

        var host = new JobHost(config);
        host.RunAndBlock();
    

以及实际的Job方法

public class Functions

    public async static Task ServiceBusResizeRequest(
         [ServiceBusTrigger("blah")] string message,             
         TextWriter log
         )
                
        await log.WriteLineAsync("got message " + message);
    


我可以通过单独的控制台应用程序成功创建队列并将其写入队列。

但是当我运行 webjob 应用程序时,它会抛出异常。

有什么想法吗?

编辑:使用 .net 4.6.1

【问题讨论】:

从 .net 4.6.1 降级到 4.6 似乎可以防止问题发生。我将把这个开放一段时间,看看是否有人对 4.6.1 失败的原因有答案 嗯,WebJobs SDK 的目标是 4.5。我们很快就会发布更新到 4.6,但这可能是问题所在。 干杯,谢谢。没有意识到它只针对 4.5。 你们中的一个人应该将此作为答案提交,以便下一个人更容易找到它。 :) @ChrisAnderson-MSFT 请注意,我们在没有 WebJobs SDK 的情况下也有同样的问题,在 4.6.1 上使用常规 SubscriptionClient 调用服务总线。我们无法让下面的 AppContextSwitchOverrides 修复工作,无论是在发出调用的服务的 Web.config 还是我们的服务总线客户端所在项目的 App.config 中,但降级到 4.6 解决了这个问题。跨度> 【参考方案1】:

标记为解决方案的答案不是解决方案,这是一项拙劣的工作。 在 .Net Framework 4.6.1 中使用它的解决方案是在 App.config 中添加 rutime 块:

<AppContextSwitchOverrides value="Switch.System.IdentityModel.DisableMultipleDNSEntriesInSANCertificate=true" />

阅读这篇文章Mitigation: X509CertificiateClaimSet.FindClaims Method

目前非常重要 Azure WebApps / WebJob 等,不支持 4.6.1 我会在此处注明(2016 年 1 月 21 日)。

这意味着,你可以使用 4.6.1 开发一个 web 作业应用程序,但是当你将它推送到 Azure 时,你会看到像 Job failed due to exit code -2146232576 这样的异常

【讨论】:

遇到了同样的问题。由于某种原因,配置中的这个 AppContextSwitchOverrides 设置没有帮助,所以我只是在构造函数 AppContext.SetSwitch("Switch.System.IdentityModel.DisableMultipleDNSEntriesInSINCertificate", true); 中添加了代码 也许你在不同的项目中有上下文文件。您是否尝试在应用程序的 app.config 和带有上下文的项目中添加设置? 我有一个 Azure 辅助角色项目并尝试将此配置应用于 app.config 部分。 为我们从 4.5.2 升级到 4.7.2 - 这个解决方案解决了问题【参考方案2】:

1 月 29 日微软发布了 3.1.3 版的 NuGet 包 WindowsAzure.ServiceBus

来自发行说明:

• 常规:.Net 4.6.1+ 兼容性修复。修复自定义 DNS IdentityVerifier,以便我们尊重 WIF 返回的多个 DNS 声明

升级包为我们解决了问题。

【讨论】:

版本 3+ 的 WindowsAzure.ServiceBus 中断 SignalR github.com/SignalR/SignalR/issues/3548【参考方案3】:

正如上面this answer 中所述,下面的 sn-p 可以解决问题

<runtime>
    ...
    <AppContextSwitchOverrides value="Switch.System.DisableMultipleDNSEntriesInSANCertificate=true" />
    ...
<runtime>

但是小心将其添加到您的解决方案中的正确项目!将其添加到包含 Azure 代码和 Azure 引用的项目中。

【讨论】:

【参考方案4】:

Microsoft 发布了一个新软件包(使用新名称)来解决此问题。所以...

删除Microsoft.AspNet.SignalR.ServiceBus 包, 安装 Microsoft.AspNet.SignalR.ServiceBus3 包,然后 升级WindowsAzure.ServiceBus 包。

更多信息在这里:https://github.com/SignalR/SignalR/issues/3548#issuecomment-296326048

【讨论】:

【参考方案5】:

从 .net 4.6.1 降级到 4.6 似乎可以防止该问题发生。

【讨论】:

【参考方案6】:

今天,我遇到了这个问题,但我对此一无所知。最后,我决定升级我正在使用的所有 Azure nuget 包(包括 webjobs、servicebus ...)和 BOOM!有用。希望以后有人遇到这个问题会有所帮助

【讨论】:

【参考方案7】:

对我来说,在我将 .NET Framework 从 4.5.2 更新到 4.7 后它开始失败 我所做的只是将 Nuget 包 WindowsAzure.ServiceBus 更新到 5.2.0

【讨论】:

以上是关于Azure WebJobs ServiceBus 返回异常:在授权上下文中找到 2 个 DNS 声明的主要内容,如果未能解决你的问题,请参考以下文章

Microsoft.ServiceBus.Messaging 与 Microsoft.Azure.ServiceBus

Azure ServiceBus:找不到“com.microsoft.azure.servicebus.ITopicClient”

Azure 服务总线:Microsoft.Azure.WebJobs.Script.HostDisposedException:主机已释放,无法使用

命名空间“Microsoft.Azure.WebJobs”中不存在 EventHubTriggerAttribute

Azure 函数无法将参数“messageReceiver”绑定到类型“Microsoft.Azure.ServiceBus.Core.MessageReceiver”

Azure 数据工厂中的 *.servicebus.windows.net 用于啥?