2011-06-27 16 views
4
私は(正しい用語何?)を使用して、泡のSugarCRM石鹸サービスに接続しようとしています

は、なぜ私が取得しています:泡との「例外(404、u'Not 'が見つかり)」

from suds.client import Client 

url = "http://localhost/sugarcrm/soap.php?wsdl" 
client = Client(url) 
session = client.service.login("usr", "pwd") 

しかし、非常に最後の行は、例外がスローされます:

ERROR:suds.client:<?xml version="1.0" encoding="UTF-8"?> 
<SOAP-ENV:Envelope xmlns:ns3="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns0="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="http://www.sugarcrm.com/sugarcrm" xmlns:ns2="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> 
    <SOAP-ENV:Header/> 
    <ns2:Body> 
     <ns1:login> 
     <user_auth xsi:type="ns1:user_auth">usr</user_auth> 
     <application_name xsi:type="ns3:string">pwd</application_name> 
     </ns1:login> 
    </ns2:Body> 
</SOAP-ENV:Envelope> 
Traceback (most recent call last): 
    File "python.py", line 5, in <module> 
    session = client.service.login("usr", "pwd") 
    File "/usr/lib/pymodules/python2.6/suds/client.py", line 542, in __call__ 
    return client.invoke(args, kwargs) 
    File "/usr/lib/pymodules/python2.6/suds/client.py", line 602, in invoke 
    result = self.send(soapenv) 
    File "/usr/lib/pymodules/python2.6/suds/client.py", line 653, in send 
    result = self.failed(binding, e) 
    File "/usr/lib/pymodules/python2.6/suds/client.py", line 714, in failed 
    raise Exception((status, reason)) 
Exception: (404, u'Not Found') 
+0

ポートを指定する必要がありますか?すなわち、http:// localhost:8080/...またはサービスがある任意のポート – jpm

+0

いいえ。ポート80です。 – Tshepang

答えて

3

Clientコンストラクタにも引数location=urlを渡して試してみてください。 WSDLのlocation要素がサーバ上のURIと一致しないことがあります。

client = Client(url, location=url) 
+0

素晴らしいヒント!他のWS(例えば、Talend Open Studioで生成されたWSなど)でそれを追加しても、 'location = url'は正しいとは限りませんが、エンドポイントの正しい場所を見つけてSUDSに渡す必要があります。 – bluish

1

あなたが泡を使用してのフックでない場合は、我々は、Python経由のSugarCRMに接続するために取り組んできたPythonライブラリを試してみてください。これはRESTとSOAPの2つになります。

SUDS接続スタブを使用するときに、私は同じ問題を抱えていたhttps://github.com/sugarcrm/python_webservices_library

+0

私は実際に始めたばかりでした。どうもありがとう。しかし、あなたたちはまだまだこれを販売していません(私はそれを期待しています(http://developers.sugarcrm.com/opensource))、またはあまりにも未成熟ですか? – Tshepang

+0

これは新しいプロジェクトです。私は、コミュニティが形成され、優れた図書館になることを支援したいと考えています。 Pythonの専門知識に参加したい場合は、私に教えてください。 – jmertic

1

でそれをチェックアウト。私はいつも得ていたException: (404, u'Not Found')他のすべてがうまくセットアップされたので、私はちょうど推測と試し始めました。

特定のSOAPサーバーがこれを引き起こしているのかどうか、私が実際に場所を設定する必要があるかどうかはわかりません。解決策は、ロケーションURLにサービスの名前を追加することでした。だから、使用される各個別のサービスのために、いくつかのスタブを作成する必要があるが、それは動作します:

servicename = "TestService"  

client = Client(                                      
    url="foobar.wsdl",                                    
    location = "http://soap.example.com/foobar/" + servicename , 
) 

result = client[servicename]["TestServicePort"].TestServiceFunction() 
print(result) 

SUDSは、それ自体でこれに(私は思う)必要がありますので、これは、行動意図されていないが、取得するための唯一の選択肢でしたこのバグを過ぎてください。たぶん私はClient.location属性を手で指定する必要があったため、SUDSはどのサービスを呼び出す必要があってもそれを変更しません。それは見つけるために私にしばらく時間がかかったので

は、私はこれは、いくつかの貧しい男を助け賭け:D

よろしく、 マイケル

関連する問題