5

私は仕事のためにWebサービスにアクセスするためのクライアントを作成しようとしています。私は、PythonでSUDSとZSIを使用してクライアントを正常に作成しました。NetBeans 6.9を使用して、いくつかのJavaクライアントの作成を支援しました。成功したクライアントはすべて、私がインターネットで見つけた無料で利用できるWebサービスにアクセスしています。

私が仕事のために接続する必要があるクライアントは、それほど友好的であるとは証明していません。認証が必要です:

http://www.cmicdataservices.com/datacenter/service.asmx

このWebサービスのWSDL記述を取得すると、6つの方法があることがわかります。

Methods (6):
    CheckIfAuthorized()
    DataProcessed()
    GetCurrentDataVer1()
    GetID()
    LogDSCStatus(xs:string _clientname, xs:string _status, xs:string _errormsg)
    ResetNewDataReferences()

70種類も返品されます。それらの1つは認証タイプです。

PythonおよびJavaクライアントでは、これらの認証オブジェクトを作成できましたが、それ以上何もできませんでした。

WSDLからは、利用可能なものを使用してこれらの認証オブジェクトを作成する方法があることを私に示すものはありません。Webサービスのサプライヤーは、Adobe Airを使用して構築されたクライアントを提供しており、それをテストして、Webサービスに対して認証して使用できることを確認できます。

Webサービスとのインターフェースが必要になったのはこれが初めてであり、ここで不足しているものがあるかどうかはわかりません。このサービスで認証する方法について、ここで私が見逃している明らかなことがあるかどうか誰かに教えてもらえますか?

これが私が書いたPythonクライアントとその出力です。印刷クライアント行の​​コメントを解除すると、WSDL情報の見事な印刷出力を確認できます。

#!/usr/bin/python

from suds.client import Client

url='http://www.cmicdataservices.com/datacenter/service.asmx?wsdl'
client = Client(url)


#print client
print client.service.CheckIfAuthorized()

出力:

Traceback (most recent call last):
  File "CMICTest.py", line 23, in <module>
    print client.service.CheckIfAuthorized()
  File "/usr/local/lib/python2.6/dist-packages/suds-0.4-py2.6.egg  /suds/client.py",      line 542, in __call__
 return client.invoke(args, kwargs)
  File "/usr/local/lib/python2.6/dist-packages/suds-0.4-py2.6.egg/suds/client.py",  line 602, in invoke
  result = self.send(soapenv)
  File "/usr/local/lib/python2.6/dist-packages/suds-0.4-py2.6.egg/suds/client.py",  line 649, in send
  result = self.failed(binding, e)
  File "/usr/local/lib/python2.6/dist-packages/suds-0.4-py2.6.egg/suds/client.py",  line 702, in failed
  r, p = binding.get_fault(reply)
 File "/usr/local/lib/python2.6/dist-packages/suds-0.4-py2.6.egg/suds/bindings /binding.py", line 265, in get_fault
raise WebFault(p, faultroot)
suds.WebFault: Server raised fault: 'Server was unable to process request. ---> Object reference not set to an instance of an object.'
4

2 に答える 2

0

動作中の Adob​​e Air Client の完全な要求と応答を取得するために、wireshark (または単にデバッグ) を使用してみてください。次に、生成したクライアントのリクエスト/レスポンスをキャプチャします。2 つの要求を比較し、作成してクライアントに追加していないオブジェクトを特定します。

于 2011-04-02T23:16:27.640 に答える
0

コードの問題は、WSDL に従って必要とされるため、CheckIfAuthorized 呼び出しの認証ヘッダーを生成しないことです。要求に必要なヘッダー要素を追加する suds で作成されたサンプル SOAP クライアントを含む、他の質問に対する私の回答を見てください。

SOAP UI 生成コード

于 2011-09-21T09:09:02.317 に答える