resource - portal azure free
¿Cómo informo un error en Windows Server Service Bus? (3)
Traté de google. Microsoft Connect no acepta errores para Service Bus. El Portal de Azure se envía a los foros de MS o a StackOverflow, así que aquí estoy.
La pregunta está realmente en el título: ¿cómo informo un error con Service Bus?
(No la versión de Azure, pero la que instala en las instalaciones)
Y aquí está el problema:
-
Microsoft.Cloud.ServiceBus.dll
tiene una referencia aMicrosoft.Cloud.Common.AzureStorage.dll
. Utiliza un tipo de ese ensamblaje, es decir,StorageAccountInfo
. Es parte de una sección de configuración (a saber,NamespacePolicyDataStoreFactorySection.Parameters.BlobStorageAccountInfo
), pero aparentemente solo tiene sentido en el entorno de Azure, y nunca se usa en el escenario local. - Pero aquí está el truco:
Microsoft.Cloud.Common.AzureStorage.dll
no se envía realmente con Service Bus 1.1. Intenté encontrarlo en varios SDK y kits de herramientas de Azure, muestras y otras cosas (de las cuales tengo muchas), así como en línea, y encontré información de zippo sobre esa DLL o dónde obtenerla. This es el único lugar donde encontré una mención de ello. - A pesar de ser un WTF en sí mismo, la ausencia de DLL realmente no impide que nada funcione: ningún código toca el tipo en el escenario local, por lo que no hay quejas.
- Pero aquí está la segunda captura:
mscorlib.dll
v4.6.7.0 (que vino con VS2015 CTP5) tiene un ligero cambio en comparación con la versión anterior, 4.0.30319.34014, - enSystem.Attribute.InternalGetCustomAttributes(PropertyInfo,Type,bool)
, más precisamente, esta línea . Esa línea no existía en la versión anterior demscorlib
, y todo estaba bien. Pero ahora existe, lo que lleva a que se toque el tipo de propiedad, lo que lleva a cargar la DLL, que falla, porque la DLL no está allí. - Así que todo el proceso comienza con la carga de la sección de configuración
NamespacePolicyDataStoreFactorySection
y funciona así:
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)
Algunos intentos (inútiles) de una solución
- Eliminar la sección de configuración de la configuración. Desafortunadamente, el Bus de servicio no es muy tolerante a fallos en este aspecto: falla con NRE cuando la sección no está presente. También es imposible proporcionar una sección de configuración alternativa "manejador", porque en el sistema de configuración .NET "manejador" y "datos" son la misma cosa.
- Proporcionar una DLL falsa con el tipo necesario. No puedo hacer eso, porque todo tiene un nombre fuerte.
- Encuentra la DLL que falta en algún lugar. Lo intenté y fracasé. No hay menciones de la DLL en la web, por no hablar de los bits.
Un lector cuidadoso puede preguntar: ¡ay, espera un minuto! VS2015 CTP5 ?! ¿Está diciendo que instaló un software de prelanzamiento en una máquina que funciona? Pues bien, claro que no funciona, ¿qué esperabas? ¡Eso te enseñará a ser el adoptante temprano!
Y el lector cuidadoso sería absolutamente correcto: totalmente mi culpa, sabía los peligros potenciales, lo hice de todos modos, me sirve bien.
Pero ese no es el punto. Mi software de prelanzamiento de instalación no disminuye la WTF de hacer referencia a una DLL, pero no enviarla. Aunque personalmente estaré bien, solo quiero asegurarme de que esto no deje de funcionar repentinamente cuando se lance .NET 5 y llegue a Windows Update.
Como se indica en esta respuesta de Jafin, afortunadamente hay una solución oficial de la versión 10/23/2015 de Microsoft que resuelve el problema con .NET 4.6.
Descargue aquí: Actualización para Service Bus Server 1.1 (KB3086798)
Sé que es una respuesta tardía a la pregunta y en realidad no es la respuesta a la pregunta formulada, pero hoy, después de instalar VS 2015 RC en una PC con Windows Service Bus 1.1 y reiniciar la PC, mi servicio de puerta de enlace del bus de servicio dejó de funcionar y Pasé por todo el dolor descrito en esta pregunta, pero finalmente pude resolver el escenario de ensamblaje falso. Aquí está la solución:
- Creó el ensamblaje falso Microsoft.Cloud.Common.AzureStorage.dll con la versión 2.1.0.0 y lo firmó con un nuevo archivo de clave.
- Se desmontó usando: ildasm / all /out=azurestorage.il Microsoft.Cloud.Common.AzureStorage.dll
- Extrajo la clave pública y el token de clave pública de otro conjunto Microsoft.Cloud. * Ubicado en la carpeta del bus de servicio por ildasm / Tp Microsoft.Cloud.Common.Diagnostics.dll
- Se abrió azurestorage.il en un editor de texto y se cambió el token de clave pública y la clave pública con los que se extrajeron en el último paso
- Reensamblado el archivo il: ilasm / dll azurestorage.il /out=Microsoft.Cloud.Common.AzureStorage.dll
- Se registró el ensamblaje para la omisión de verificación de firmas mediante: sn -Vr Microsoft.Cloud.Common.AzureStorage.dll
- Se instaló el ensamblaje resultante en GAC: gacutil / i Microsoft.Cloud.Common.AzureStorage.dll
y finalmente funcionó. Espero que esto ayude a cualquiera que se atasque en este problema.
Según entiendo, lo que necesita es informar un error a Microsoft y descubrí que necesita informar un error a Microsoft. Es bueno saber que Microsoft ayudará a los usuarios que reportan errores.
De acuerdo con la respuesta de Microsoft, puede informar errores de Microsfot aquí: https://connect.microsoft.com/
Nota: debe tener una cuenta de Microsoft, puede hacerlo en hotmail.com
Y sé que algunos de los productos de Microsoft no están allí, como Outlook.com.
Primero vaya a https://connect.microsoft.com/ :
PASO A PASO
i.stack.imgur.com/CewDL.png
Paso 1: escriba el programa de lo que le gustaría informar un error al respecto, y luego haga clic en unirse.
i.stack.imgur.com/pJbQY.png
Paso 2: Haga clic en continuar.
i.stack.imgur.com/cCgXq.png
Paso 3: Componga su perfil.
i.stack.imgur.com/PVqXi.png
Paso 4: Haga clic en comentarios.
i.stack.imgur.com/nL5Kr.png
Paso 5: Escriba el título del error en el cuadro de texto al final de la página.
i.stack.imgur.com/gEOJG.png
Paso 6: Luego haga clic en enviar comentarios
i.stack.imgur.com/MQgV0.png
Paso 7: Ahora puedes escribir el problema y decirle a Microsoft sobre este error.