微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

天蓝色 – 如何报告Windows Server Service Bus中的错误?

我试图google。 Microsoft Connect不接受服务总线的错误。 Azure Portal发送到MS论坛或StackOverflow – 所以在这里我是。

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

这里是问题:

> Microsoft.Cloud.ServiceBus.dll对Microsoft.Cloud.Common.AzureStorage.dll的引用。它使用该程序集中的一种类型 – 即StorageAccountInfo。它是配置部分的一部分(即NamespacePolicyDataStoreFactorySection.Parameters.BlobStorageAccountInfo),但显然仅在Azure环境中有意义,并且从未在本地场景中使用。
>但是这是catch:Microsoft.Cloud.Common.AzureStorage.dll实际上并不随Service Bus 1.1一起提供。我试图在各种SDK和Azure工具包,示例和whatnot(其中有很多)以及在线 – 找到zippo信息关于该DLL或在哪里可以找到它。 This是我发现提到的唯一的地方。
>尽管它本身就是一个WTF,但没有DLL并没有真正阻止任何事情发生:该类型实际上并不涉及内部场景中的任何代码,所以没有投诉。
>但是这是第二个catch:mscorlib.dll v4.6.7.0(与VS2015 CTP5一起提供)与以前的版本4.0.30319.34014相比,在System.Attribute.InternalGetCustomAttributes(PropertyInfo,Type,bool)中略有变化, ,更确切地说,this line.这条线在以前的版本的mscorlib中并不存在,一切都很好。但现在它确实存在,这导致被触摸的属性类型,这导致加载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)

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

>从配置中删除配置部分。不幸的是,Service Bus在这方面并不是非常容错的:当不存在分段时,NRE失败。因为在.NET配置系统中,“处理程序”和“数据”是一样的,所以也不可能提供一个替代的配置部分“处理程序”。
>提供一个假的DLL与所需的类型。不能这样做,因为一切都被强烈命名。
>找到丢失的DLL在某个地方。试过了,失败了。在网络上没有提到DLL,更不用说这些位了。

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

但这不是重点。我的安装预发行软件不会降低引用DLL但不运送的WTFness。虽然我个人很好,我只是想确保这并没有突然停止工作,当.NET 5发布和Windows Update。

我知道这个问题的答案是一个迟来的答案,实际上并不是问题的答案,但是今天在安装VS 2015 RC的PC上安装了Windows Service Bus 1.1并重新启动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.dll从服务总线文件夹中的另一个Microsoft.Cloud。*程序集中提取公钥和公钥令牌
>在文本编辑器中打开azurestorage.il,并更改公钥令牌和公钥,并在最后一步中提取出公钥
>重新组装了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

它终于奏效了。希望这可以帮助任何人陷入困境。

原文地址:https://www.jb51.cc/windows/372389.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐