【问题标题】:How do I report a bug in Windows Server Service Bus?如何报告 Windows Server 服务总线中的错误?
【发布时间】:2015-04-04 15:54:41
【问题描述】:

我试着用谷歌搜索。 Microsoft Connect 不接受服务总线的错误。 Azure 门户发送到 MS 论坛或 StackOverflow - 所以我在这里。

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

这就是问题所在:

  1. Microsoft.Cloud.ServiceBus.dll 引用了 Microsoft.Cloud.Common.AzureStorage.dll。它使用该程序集中的一种类型 - 即StorageAccountInfo。它是配置部分的一部分(即NamespacePolicyDataStoreFactorySection.Parameters.BlobStorageAccountInfo),但显然只在 Azure 环境中有意义,而从未在本地场景中使用。
  2. 但问题是:Microsoft.Cloud.Common.AzureStorage.dll 实际上并未随 Service Bus 1.1 一起提供。我试图在各种 SDK 和 Azure 工具包、示例和诸如此类的东西(我有很多)以及在线上找到它 - 并找到了有关该 DLL 的 zippo 信息或从何处获取它。 This 是我唯一找到提及它的地方。
  3. 尽管它本身就是一个 WTF,但缺少 DLL 并不会真正阻止任何东西的工作:在本地场景中,任何代码实际上都没有触及该类型,因此没有任何抱怨。
  4. 但这是第二个问题:mscorlib.dllv4.6.7.0(与 VS2015 CTP5 一起提供)与之前的版本 4.0.30319.34014 相比略有变化,-在System.Attribute.InternalGetCustomAttributes(PropertyInfo,Type,bool),更准确地说是this line .之前的mscorlib 版本中不存在该行,一切都很好。但是现在确实存在,导致属性类型被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. 从 config.xml 中删除配置部分。不幸的是,服务总线在这方面的容错性不是很好:当部分不存在时,NRE 失败。也不可能提供替代配置部分“处理程序”,因为在 .NET 配置系统中,“处理程序”和“数据”是同一回事。
  2. 提供具有所需类型的假 DLL。不能这样做,因为所有内容都是强命名的。
  3. 在某处找到丢失的 DLL。试过了,失败了。网络上没有提到 DLL,更不用说那些位了。

细心的读者可能会问:哇,等一下! VS2015 CTP5?!你是说你在工作机器上安装了预发布软件?!那么,当然它不起作用,你期望什么?这将教你成为早期采用者!
细心的读者会是绝对正确的:完全是我的错,我知道潜在的危险,我还是做了,对我有好处。

但这不是重点。我安装的预发布软件不会减少引用 DLL 的 WTFness,但不会减少它的发布。虽然我个人会很好,但我只是想确保当 .NET 5 发布并点击 Windows 更新时它不会突然停止工作。

【问题讨论】:

  • But that's not the point. 关键是您不知道如何报告错误/与谁联系以获得软件产品...
  • 我就这个问题联系了微软,他们directed me to this。在那里你应该可以联系他们,或者至少可以和他们聊天报告错误。
  • 但这是对小型企业的支持,不是吗?我会试试这个,但你确定我可以在没有小型企业帐户的情况下这样做吗?
  • 微软说这是报告 Windows Server 服务总线错误的地方。我试过了,您可以在没有任何帐户(Microsoft 帐户除外)的情况下开始聊天。我不确定这是否是最终目标,或者他们是否会尝试将您重定向到其他地方。
  • 尝试在 Twitter 上 ping Azure 团队。有时他们会非常敏感,并为您指明正确的方向。或者,您可以随时尝试小型企业支持。我听说它们是很棒的解决方案。

标签: azure .net-core azureservicebus servicebus mscorlib


【解决方案1】:

我知道这是一个迟到的问题答案,实际上不是问题的答案,但是今天,在装有 Windows 服务总线 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.dll 从位于服务总线文件夹中的另一个 Microsoft.Cloud.* 程序集中提取公钥和公钥令牌
  4. 在文本编辑器中打开 azurestorage.il 并将公钥令牌和公钥更改为上一步中提取的那些
  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

它终于奏效了。希望这对陷入此问题的任何人有所帮助。

【讨论】:

  • 我遇到了同样的问题。你能分享一下你的假组装吗?
  • 在此处分享:dropbox.com/s/cb5fro1rvg4dbvu/… 使用此程序集,您只需执行步骤 6 和 7。
  • 我想确保我没有忘记它在哪里以及如何解决它,所以我已将您的解决方案添加到 Github - github.com/matthewcanty/…
  • 将我的开发机器升级到 Windows 10。两个问题:AppFabric 缓存未启动(需要远程注册表服务才能运行)和服务总线未启动。这个假货解决了我的服务总线问题!
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    据我了解,您需要向 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。

    【讨论】:

    • 请复制图片地址并查看
    • 真的吗?你读过这个问题吗?它在一开始就提到了 MS Connect。
    • @FyodorSoikin 这是我所知道的向 Microsoft 报告错误的唯一方法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-12
    • 2010-11-02
    • 1970-01-01
    相关资源
    最近更新 更多