如何报告Windows Server Service Bus中的错误?

Fyo*_*kin 17 servicebus azure mscorlib azureservicebus .net-core

我试着去谷歌.Microsoft Connect不接受Service Bus的错误.Azure门户发送到MS论坛或StackOverflow - 所以我在这里.

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

这是问题所在:

  1. Microsoft.Cloud.ServiceBus.dll有参考Microsoft.Cloud.Common.AzureStorage.dll.它使用该程序集中的一种类型 - 即StorageAccountInfo.它是配置部分(即NamespacePolicyDataStoreFactorySection.Parameters.BlobStorageAccountInfo)的一部分,但显然只在Azure环境中有意义,并且从未在内部部署场景中使用过.
  2. 但这里有一个问题:Microsoft.Cloud.Common.AzureStorage.dll服务总线1.1实际上没有附带.我试图在各种SDK和Azure工具包,样本和诸如此类(我有很多)以及在线等方面找到它 - 并找到有关该DLL的zippo信息或从何处获取它.是我发现它的唯一地方.
  3. 虽然它本身就是一个WTF,但DLL的缺失并不能真正阻止任何工作:该类型实际上并没有被内部部署的任何代码所触及,因此没有任何抱怨.
  4. 但这是第二个问题:mscorlib.dllv4.6.7.0(与VS2015 CTP5一起提供)与之前的版本4.0.30319.34014相比略有变化System.Attribute.InternalGetCustomAttributes(PropertyInfo,Type,bool),更确切地说,这一行.这条线在以前的版本中不存在mscorlib,一切都很好.但现在它确实存在,导致属性类型被触及,这导致加载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)
Run Code Online (Sandbox Code Playgroud)

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

  1. 从配置中删除配置部分.不幸的是,服务总线在这方面不是很容错的:当部分不存在时,NRE失败.也不可能提供替代配置部分"处理程序",因为在.NET配置系统中"处理程序"和"数据"是相同的.
  2. 提供所需类型的假DLL.不能这样做,因为一切都是强烈命名的.
  3. 在某处找到丢失的DLL.试过并失败了.网上没有提到DLL,更不用说比特了.

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

但那不是重点.我安装预发布软件不会降低引用DLL的WTFness,但不会降低它的运输速度.虽然我个人会很好,但我只想确保在.NET 5发布并点击Windows Update时突然停止工作.

Ara*_*imi 19

我知道这个问题的答案很晚,实际上并不是问题的答案,但今天,在使用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.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

它终于奏效了.希望这可以帮助任何陷入这个问题的人.

  • 在这里分享:https://www.dropbox.com/s/cb5fro1rvg4dbvu/Microsoft.Cloud.Common.AzureStorage.dll?dl=1使用此程序集,您只需要执行步骤6和7. (3认同)