14122006 SOAP
昨日のエラーは、SOAPpyのSOAPActionがなんかおかしいということで落ち着いた。
あれこれとwebをあさってみたのだけど、結局デバッグのやり方がわからなかったので、直接観測することにした。久しぶりのetherealだ。
とかいって、ここんとこ使う機会もなかったのでインストールから。最近のFCだと
yum install ethereal
だとGUIが入らなくて、
yum install ethereal-gnome
なのね。知らんかった。
でもって、パケットキャプチャーしながら、httpのみフィルタでSOAP::Liteのクライアントと、SOAPpyクライアントのXMLを比較したところ、SOAPpyはヘッダーのSOAPActionがなんか変だということに気付いた。
SOAPAction:"hi"\r\n
と、メソッド名が入ってるし、、、、エラーの原因がなんとなく見えてきた。で、なんじゃこりゃーとかいいながらSOAPAction直接指定したらやっぱ動いた。
>>> server = SOAPProxy('http://localhost/cgi-bin/test.cgi','http://localhost/Demo', \ soapaction='http://localhost/Demo#hi') >>> server.hi() 'hello, world'
でも、これだとあんま意味ないし。なんでデフォルト空文字列にならないのかなぁ(ソースをちら見したけどわからんかった)。SOAP::Liteで書いたサーバーのほうでSOAPAction無視するようにすればいいのかも知れないけどなんか気持ち悪いんだよナァ。
DWの第三部は相互運用性とかいうネタなのな。なんだかなー(といまさらながら)思った。
KEGGみたいにWSDL書いてやればこういうことあんま気にしなくていいのかなぁ(rubyでもperlでもpythonでも楽チンですよみたいに見えるし)。それとも結構苦労したのかな?