no se puede llamar a Azure Service Bus desde Python

Intentando ejecutar el ejemplo de hola mundo para poner algo en la cola, crear una cola... cada vez que llamo a Azure, aparece un error.

Aquí está el código:

from azure.servicebus import *

bus_service = ServiceBusService(service_namespace='testtest', account_key='my_access_token', issuer='my_issuer')
bus_service.create_topic('mytopic')

Aquí está el error que me devuelve:

$ /c/Python27/python pythontest.py
Traceback (most recent call last):
  File "pythontest.py", line 4, in <module>
    bus_service.create_topic('mytopic')
  File "c:\Python27\lib\site-packages\azure\servicebus\servicebusservice.py", line 1
42, in create_topic
    request.headers = _update_service_bus_header(request, self.account_key, self.iss
uer)
  File "c:\Python27\lib\site-packages\azure\servicebus\__init__.py", line 185, in _u
pdate_service_bus_header
    request.headers.append(('Authorization', _sign_service_bus_request(request, acco
unt_key, issuer)))
  File "c:\Python27\lib\site-packages\azure\servicebus\__init__.py", line 192, in _s
ign_service_bus_request
    return 'WRAP access_token="' + _get_token(request, account_key, issuer) + '"'
  File "c:\Python27\lib\site-packages\azure\servicebus\__init__.py", line 233, in _g
et_token
    connection.send(request_body)
  File "c:\Python27\lib\site-packages\azure\http\winhttp.py", line 313, in send
    self._httprequest.send(request_body)
  File "c:\Python27\lib\site-packages\azure\http\winhttp.py", line 198, in send
    ctypes.memmove(safearray.pvdata, request, len(request))
WindowsError: exception: access violation writing 0x0000000000000000

Siempre me da el mismo error si pongo algo en una cola o creo una cola, creo un tema, envío un mensaje a un tema, etc.

¿algunas ideas?

preguntado el 12 de junio de 12 a las 16:06

jajaja, miniBSOD. Creo que nadie lo ayudará, excepto el soporte técnico de Microsoft. -

2 Respuestas

Este es un problema con la biblioteca de Azure cuando se usa desde Python de 64 bits.

Los cambios para que funcione son pequeños, así que los he enumerado aquí para usted. La solución también se enviará a github + pypi en breve.

Realice los siguientes cambios en azul/http/winhttp.py:

Añada c_talla_t a la declaración de importación

from ctypes import c_void_p, c_long, c_ulong, c_longlong, c_ulonglong, c_short, c_ushort, c_wchar_p, c_byte, c_size_t

Reemplaza CoInicializar(0) con

CoInitialize(None)

Vuelva a colocar la API relacionadas con COM sección con este

_ole32 = oledll.ole32
_oleaut32 = WinDLL('oleaut32')
_CLSIDFromString = _ole32.CLSIDFromString
_CoInitialize = _ole32.CoInitialize
_CoInitialize.argtypes = [c_void_p]

_CoCreateInstance = _ole32.CoCreateInstance

_SysAllocString = _oleaut32.SysAllocString
_SysAllocString.restype = c_void_p
_SysAllocString.argtypes = [c_wchar_p]

_SysFreeString = _oleaut32.SysFreeString
_SysFreeString.argtypes = [c_void_p]

_SafeArrayDestroy = _oleaut32.SafeArrayDestroy
_SafeArrayDestroy.argtypes = [c_void_p]

_CoTaskMemAlloc = _ole32.CoTaskMemAlloc
_CoTaskMemAlloc.restype = c_void_p
_CoTaskMemAlloc.argtypes = [c_size_t]

Respondido el 15 de junio de 12 a las 00:06

¿Es este el código exacto que estás usando? Al menos la account_key no está bien, debería estar en formato base64

bus_service = ServiceBusService(service_namespace='testtest', account_key='my_access_token', issuer='my_issuer') 

Respondido el 17 de junio de 12 a las 20:06

no, eliminé la clave de la cuenta y el emisor. Creé múltiples espacios de nombres y creé varios temas e intenté enviarles mensajes usando las diferentes claves de cuenta y ninguno de ellos funcionó. Creo que el problema es con los permisos en el lado azul. - user1363644

¿Podría intentar account_name='weidongtestservicebus2' y account_key='LNkJyAIfeYlGyr3A8Wa7bwQovZ9b1/ZdOEtDr5bhxo0=' y issuer='propietario'? Si funciona para usted, entonces tal vez sea el problema de la cuenta de almacenamiento. ¿Qué versión de Python estás usando? - Weidonghuang

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.