如何报告 Windows 服务器服务总线中的错误?
How do I report a bug in Windows Server Service Bus?
我试过google。 Microsoft Connect 不接受服务总线的错误。 Azure 门户发送到 MS 论坛或 Whosebug - 所以我在这里。
问题确实在标题中:如何报告服务总线的错误?
(不是 Azure 版本,而是您在本地安装的版本)
问题来了:
Microsoft.Cloud.ServiceBus.dll
引用了 Microsoft.Cloud.Common.AzureStorage.dll
。它使用该程序集中的一种类型 - 即 StorageAccountInfo
。它是配置部分的一部分(即 NamespacePolicyDataStoreFactorySection.Parameters.BlobStorageAccountInfo
),但显然只在 Azure 环境中有意义,并且从未在 on-premise 场景中使用。
- 但问题是:
Microsoft.Cloud.Common.AzureStorage.dll
实际上并未随服务总线 1.1 一起提供。我试图在各种 SDK 和 Azure 工具包、示例和诸如此类的东西(我有很多)以及在线中找到它,并找到了关于该 DLL 或从哪里获取它的 zippo 信息。 This 是我唯一提到它的地方。
- 尽管本身就是一个 WTF,但缺少 DLL 并不能真正阻止任何工作:在 on-premise 场景中,该类型实际上没有被任何代码触及,所以没有抱怨。
- 但这是第二个问题:
mscorlib.dll
v4.6.7.0(随 VS2015 CTP5 一起提供)与之前的版本 4.0.30319.34014 相比略有变化,- 在 System.Attribute.InternalGetCustomAttributes(PropertyInfo,Type,bool)
中更准确地说,this line。 mscorlib
之前的版本没有那一行,一切正常。但是现在它确实存在,这导致 属性 类型被 touched,这导致加载 DLL 失败,因为 DLL 不存在。
- 所以整个过程从加载配置部分开始
NamespacePolicyDataStoreFactorySection
并且像这样工作:
ConfigurationManager.GetSection ->
... ->
BaseConfigurationRecord.GetSectionRecursive ->
... ->
BaseConfigurationRecord.CallCreateSection ->
MgmtConfigurationRecord.CreateSection ->
ConfigurationElement.Reset ->
ConfigurationElement.get_Properties ->
ConfigurationElement.PropertiesFromType ->
ConfigurationElement.CreatePropertyBagFromType ->
Attribute.GetCustomAttribute (for property BlobStorageAccountInfo of type StorageAccountInfo) ->
... ->
Attribute.InternalGetCustomAttributes(PropertyInfo) ->
Attributes.GetIndexParameterTypes ->
RuntimePropertyInfo.GetIndexParameters ->
... ->
RuntimeMethodInfo.GetParameters ->
... ->
kaboom! (touches the return type, tries to load DLL containing it, fails)
一些(徒劳的)解决方法尝试
- 从配置中删除配置部分。不幸的是,服务总线在这方面的容错性不是很好:当部分不存在时,NRE 会失败。也不可能提供替代配置部分 "handler",因为在 .NET 配置系统中 "handler" 和 "data" 是同一回事。
- 提供所需类型的假 DLL。不能那样做,因为一切都是强命名的。
- 在某处找到丢失的 DLL。试过了,但失败了。网络上没有提到 DLL,更不用说位了。
细心的reader可能会问:哇,等一下! VS2015 CTP5?!你是说你在工作机器上安装了 pre-release 软件?!那么,当然它不起作用,你期望什么?那会教你成为早期采用者!
小心 reader 绝对正确:完全是我的错,我知道潜在的危险,我还是做了,对了。
但这不是重点。我安装 pre-release 软件不会减少引用 DLL 的 WTFness,但不会减少它。虽然我个人会没事的,但我只是想确保当 .NET 5 发布并点击 Windows 更新时这不会突然停止工作。
据我了解,您需要向 Microsoft 报告错误,我发现您需要向 Microsoft 报告错误。很高兴知道微软会为报告错误的用户提供优惠。
根据 Microsoft 的回答,您可以在此处报告 Microsfot 错误:https://connect.microsoft.com/
注意:您必须有一个微软帐户,您可以在hotmail.com
而且我知道一些微软产品不存在 outlook.com
先去https://connect.microsoft.com/:
循序渐进
i.stack.imgur.com/CewDL.png
第1步:编写你喜欢的程序报告有关它的错误,然后点击加入。
i.stack.imgur.com/pJbQY.png
第 2 步:点击继续。
i.stack.imgur.com/cCgXq.png
第 3 步:制作个人资料。
i.stack.imgur.com/PVqXi.png
第 4 步:点击反馈。
i.stack.imgur.com/nL5Kr.png
第 5 步:在页面末尾的文本框中写下错误标题。
i.stack.imgur.com/gEOJG.png
第 6 步:然后点击 提交反馈
i.stack.imgur.com/MQgV0.png
第 7 步:现在您可以编写问题并将此错误告知 Microsoft。
我知道这是一个迟到的问题答案,实际上不是问题的答案,但是今天,在带有 Windows Service Bus 1.1 的 PC 上安装 VS 2015 RC 并重新启动 PC 之后,我的服务总线网关服务停止工作,我经历了这个问题中描述的所有痛苦,但最终可以从假组装场景中找到解决方案。这是解决方案:
- 创建了版本为 2.1.0.0 的假程序集 Microsoft.Cloud.Common.AzureStorage.dll 并使用新的密钥文件对其进行了签名。
- 反汇编使用:ildasm /all /out=azurestorage.il Microsoft.Cloud.Common.AzureStorage.dll
- 通过 ildasm /Tp Microsoft.Cloud.Common.Diagnostics 从位于服务总线文件夹中的另一个 Microsoft.Cloud.* 程序集提取了 public 密钥和 public 密钥令牌。 dll
- 在文本编辑器中打开 azurestorage.il 并将 public-密钥标记和 public 密钥更改为在最后一步中提取的那些
- 重新组装了il文件:ilasm /dll azurestorage.il /out=Microsoft.Cloud.Common.AzureStorage.dll
- 使用以下方法注册程序集以跳过签名验证:sn -Vr Microsoft.Cloud.Common.AzureStorage.dll
- 将生成的程序集安装到 GAC:gacutil /i Microsoft.Cloud.Common.AzureStorage.dll
终于成功了。希望这可以帮助任何陷入此问题的人。
正如 Jafin 在 中给出的那样,幸运的是 Microsoft 2015 年 10 月 23 日发布的官方修复解决了 .NET 4.6 的问题。
我试过google。 Microsoft Connect 不接受服务总线的错误。 Azure 门户发送到 MS 论坛或 Whosebug - 所以我在这里。
问题确实在标题中:如何报告服务总线的错误?
(不是 Azure 版本,而是您在本地安装的版本)
问题来了:
Microsoft.Cloud.ServiceBus.dll
引用了Microsoft.Cloud.Common.AzureStorage.dll
。它使用该程序集中的一种类型 - 即StorageAccountInfo
。它是配置部分的一部分(即NamespacePolicyDataStoreFactorySection.Parameters.BlobStorageAccountInfo
),但显然只在 Azure 环境中有意义,并且从未在 on-premise 场景中使用。- 但问题是:
Microsoft.Cloud.Common.AzureStorage.dll
实际上并未随服务总线 1.1 一起提供。我试图在各种 SDK 和 Azure 工具包、示例和诸如此类的东西(我有很多)以及在线中找到它,并找到了关于该 DLL 或从哪里获取它的 zippo 信息。 This 是我唯一提到它的地方。 - 尽管本身就是一个 WTF,但缺少 DLL 并不能真正阻止任何工作:在 on-premise 场景中,该类型实际上没有被任何代码触及,所以没有抱怨。
- 但这是第二个问题:
mscorlib.dll
v4.6.7.0(随 VS2015 CTP5 一起提供)与之前的版本 4.0.30319.34014 相比略有变化,- 在System.Attribute.InternalGetCustomAttributes(PropertyInfo,Type,bool)
中更准确地说,this line。mscorlib
之前的版本没有那一行,一切正常。但是现在它确实存在,这导致 属性 类型被 touched,这导致加载 DLL 失败,因为 DLL 不存在。 - 所以整个过程从加载配置部分开始
NamespacePolicyDataStoreFactorySection
并且像这样工作:
ConfigurationManager.GetSection ->
... ->
BaseConfigurationRecord.GetSectionRecursive ->
... ->
BaseConfigurationRecord.CallCreateSection ->
MgmtConfigurationRecord.CreateSection ->
ConfigurationElement.Reset ->
ConfigurationElement.get_Properties ->
ConfigurationElement.PropertiesFromType ->
ConfigurationElement.CreatePropertyBagFromType ->
Attribute.GetCustomAttribute (for property BlobStorageAccountInfo of type StorageAccountInfo) ->
... ->
Attribute.InternalGetCustomAttributes(PropertyInfo) ->
Attributes.GetIndexParameterTypes ->
RuntimePropertyInfo.GetIndexParameters ->
... ->
RuntimeMethodInfo.GetParameters ->
... ->
kaboom! (touches the return type, tries to load DLL containing it, fails)
一些(徒劳的)解决方法尝试
- 从配置中删除配置部分。不幸的是,服务总线在这方面的容错性不是很好:当部分不存在时,NRE 会失败。也不可能提供替代配置部分 "handler",因为在 .NET 配置系统中 "handler" 和 "data" 是同一回事。
- 提供所需类型的假 DLL。不能那样做,因为一切都是强命名的。
- 在某处找到丢失的 DLL。试过了,但失败了。网络上没有提到 DLL,更不用说位了。
细心的reader可能会问:哇,等一下! VS2015 CTP5?!你是说你在工作机器上安装了 pre-release 软件?!那么,当然它不起作用,你期望什么?那会教你成为早期采用者!
小心 reader 绝对正确:完全是我的错,我知道潜在的危险,我还是做了,对了。
但这不是重点。我安装 pre-release 软件不会减少引用 DLL 的 WTFness,但不会减少它。虽然我个人会没事的,但我只是想确保当 .NET 5 发布并点击 Windows 更新时这不会突然停止工作。
据我了解,您需要向 Microsoft 报告错误,我发现您需要向 Microsoft 报告错误。很高兴知道微软会为报告错误的用户提供优惠。
根据 Microsoft 的回答,您可以在此处报告 Microsfot 错误:https://connect.microsoft.com/
注意:您必须有一个微软帐户,您可以在hotmail.com
而且我知道一些微软产品不存在 outlook.com
先去https://connect.microsoft.com/:
循序渐进
i.stack.imgur.com/CewDL.png
第1步:编写你喜欢的程序报告有关它的错误,然后点击加入。
i.stack.imgur.com/pJbQY.png
第 2 步:点击继续。
i.stack.imgur.com/cCgXq.png
第 3 步:制作个人资料。
i.stack.imgur.com/PVqXi.png
第 4 步:点击反馈。
i.stack.imgur.com/nL5Kr.png
第 5 步:在页面末尾的文本框中写下错误标题。
i.stack.imgur.com/gEOJG.png
第 6 步:然后点击 提交反馈
i.stack.imgur.com/MQgV0.png
第 7 步:现在您可以编写问题并将此错误告知 Microsoft。
我知道这是一个迟到的问题答案,实际上不是问题的答案,但是今天,在带有 Windows Service Bus 1.1 的 PC 上安装 VS 2015 RC 并重新启动 PC 之后,我的服务总线网关服务停止工作,我经历了这个问题中描述的所有痛苦,但最终可以从假组装场景中找到解决方案。这是解决方案:
- 创建了版本为 2.1.0.0 的假程序集 Microsoft.Cloud.Common.AzureStorage.dll 并使用新的密钥文件对其进行了签名。
- 反汇编使用:ildasm /all /out=azurestorage.il Microsoft.Cloud.Common.AzureStorage.dll
- 通过 ildasm /Tp Microsoft.Cloud.Common.Diagnostics 从位于服务总线文件夹中的另一个 Microsoft.Cloud.* 程序集提取了 public 密钥和 public 密钥令牌。 dll
- 在文本编辑器中打开 azurestorage.il 并将 public-密钥标记和 public 密钥更改为在最后一步中提取的那些
- 重新组装了il文件:ilasm /dll azurestorage.il /out=Microsoft.Cloud.Common.AzureStorage.dll
- 使用以下方法注册程序集以跳过签名验证:sn -Vr Microsoft.Cloud.Common.AzureStorage.dll
- 将生成的程序集安装到 GAC:gacutil /i Microsoft.Cloud.Common.AzureStorage.dll
终于成功了。希望这可以帮助任何陷入此问题的人。
正如 Jafin 在