2

hello world の例を実行して何かをキューに入れようとして、キューを作成しようとしています... azure を呼び出すたびにエラーが発生します。

コードは次のとおりです。

from azure.servicebus import *

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

これが私が返すエラーです:

$ /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

何かをキューに入れたり、キューを作成したり、トピックを作成したり、トピックにメッセージを送信したりしても、常に同じエラーが発生します。

何か案は?

4

2 に答える 2

0

これは、64 ビット Python から使用した場合の azure ライブラリの問題です。

それを機能させるための変更は小さいので、ここにリストしました。修正はまもなく github + pypi にもプッシュされます。

azure/http/winhttp.pyに次の変更を加えます。

c_size_tをインポート ステートメントに追加します。

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

CoInitialize(0)を次のように置き換えます

CoInitialize(None)

Com関連のAPIセクションをこれに置き換えます

_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]
于 2012-06-14T22:19:07.550 に答える
0

これはあなたが使用している正確なコードですか?少なくとも account_key が正しくありません。base64 形式である必要があります

bus_service = ServiceBusService(service_namespace='testtest', account_key='my_access_token', issuer='my_issuer') 
于 2012-06-12T19:21:20.980 に答える