如何报告 Windows 服务器服务总线中的错误?

How do I report a bug in Windows Server Service Bus?

我试过google。 Microsoft Connect 不接受服务总线的错误。 Azure 门户发送到 MS 论坛或 Whosebug - 所以我在这里。

问题确实在标题中:如何报告服务总线的错误?
(不是 Azure 版本,而是您在本地安装的版本)

问题来了:

  1. Microsoft.Cloud.ServiceBus.dll 引用了 Microsoft.Cloud.Common.AzureStorage.dll。它使用该程序集中的一种类型 - 即 StorageAccountInfo。它是配置部分的一部分(即 NamespacePolicyDataStoreFactorySection.Parameters.BlobStorageAccountInfo),但显然只在 Azure 环境中有意义,并且从未在 on-premise 场景中使用。
  2. 但问题是:Microsoft.Cloud.Common.AzureStorage.dll 实际上并未随服务总线 1.1 一起提供。我试图在各种 SDK 和 Azure 工具包、示例和诸如此类的东西(我有很多)以及在线中找到它,并找到了关于该 DLL 或从哪里获取它的 zippo 信息。 This 是我唯一提到它的地方。
  3. 尽管本身就是一个 WTF,但缺少 DLL 并不能真正阻止任何工作:在 on-premise 场景中,该类型实际上没有被任何代码触及,所以没有抱怨。
  4. 但这是第二个问题:mscorlib.dll v4.6.7.0(随 VS2015 CTP5 一起提供)与之前的版本 4.0.30319.34014 相比略有变化,- 在 System.Attribute.InternalGetCustomAttributes(PropertyInfo,Type,bool) 中更准确地说,this linemscorlib之前的版本没有那一行,一切正常。但是现在它确实存在,这导致 属性 类型被 touched,这导致加载 DLL 失败,因为 DLL 不存在。
  5. 所以整个过程从加载配置部分开始 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)

一些(徒劳的)解决方法尝试

  1. 从配置中删除配置部分。不幸的是,服务总线在这方面的容错性不是很好:当部分不存在时,NRE 会失败。也不可能提供替代配置部分 "handler",因为在 .NET 配置系统中 "handler" 和 "data" 是同一回事。
  2. 提供所需类型的假 DLL。不能那样做,因为一切都是强命名的。
  3. 在某处找到丢失的 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 之后,我的服务总线网关服务停止工作,我经历了这个问题中描述的所有痛苦,但最终可以从假组装场景中找到解决方案。这是解决方案:

  1. 创建了版本为 2.1.0.0 的假程序集 Microsoft.Cloud.Common.AzureStorage.dll 并使用新的密钥文件对其进行了签名。
  2. 反汇编使用:ildasm /all /out=azurestorage.il Microsoft.Cloud.Common.AzureStorage.dll
  3. 通过 ildasm /Tp Microsoft.Cloud.Common.Diagnostics 从位于服务总线文件夹中的另一个 Microsoft.Cloud.* 程序集提取了 public 密钥和 public 密钥令牌。 dll
  4. 在文本编辑器中打开 azurestorage.il 并将 public-密钥标记和 public 密钥更改为在最后一步中提取的那些
  5. 重新组装了il文件:ilasm /dll azurestorage.il /out=Microsoft.Cloud.Common.AzureStorage.dll
  6. 使用以下方法注册程序集以跳过签名验证:sn -Vr Microsoft.Cloud.Common.AzureStorage.dll
  7. 将生成的程序集安装到 GAC:gacutil /i Microsoft.Cloud.Common.AzureStorage.dll

终于成功了。希望这可以帮助任何陷入此问题的人。

正如 Jafin 在 中给出的那样,幸运的是 Microsoft 2015 年 10 月 23 日发布的官方修复解决了 .NET 4.6 的问题。

在此处下载:Update for Service Bus Server 1.1 (KB3086798)