ちと、メモ的に。
IIS 7.0 上に WordPress 3.0 を入れた状態で、XML-RPC を使って投稿しようとすると、レスポンスが2バイト欠けます。
故に、
Response from server does not contain valid XML.
なるエラーが出ます。
XML-RPC.NET ライブラリを試しても、BlogWrite を試しても駄目なので、おそらく、IIS + PHP + wordpress の組み合わせが駄目です。
<?xml version=”1.0″?> <methodResponse> <params> <param> <value> <array><data> <value><struct> <member><name>isAdmin</name><value><boolean>1</boolean></value></member> <member><name>url</name><value><string>http://localhost/wp/</string></value></member> <member><name>blogid</name><value><string>1</string></value></member> <member><name>blogName</name><value><string>local blog</string></value></member> <member><name>xmlrpc</name><value><string>http://localhost/wp/xmlrpc.php</string></value></member> </struct></value> </data></array> </value> </param> </params> </methodRespons
こんな風に最後の2バイトが欠けます。おそらく、UTF-8 BOM の分だけ加算し忘れて、content-length が間違っているかと。
同じソースを動かしても、linux 上の wordpress は ok です。
ソース自体は、
.NET(C#)でXML-RPCを使ってブログに投稿する | Moonmile Solutions Blog
http://www.moonmile.net/blog/archives/1284
を参照。
エラーの回避方法は分からず。
環境としては、
- windows 7
- PHP 本家(MSのPHPではない)
- WordPress 本家(MSのPHPではない)
- IIS 7.0
ですね。他の組み合わせでは未定です。
~
追記 2010/09/14
解決法を見つけました。
wp-includes/class-IXR.php の 339 行目あたりに、XML-RPCのレスポンスを返しているので、
// Create the XML $xml = <<<EOD <methodResponse> <params> <param> <value> $resultxml </value> </param> </params> </methodResponse> EOD; // Send it $this->output($xml); }
のように、</methodResponse> の後ろに2バイト分、改行を増やしてやります。
本来はlengthを変えるところなのですが、乱暴ですが、これでIISでも動きます。
IISは鬼門だとゴーストが囁きます。
えぇ・・・囁きますとも。
ふふふ、伊達にWindows+IIS環境で過している訳ではありません。
解決方法を見つけましたぜッ!!!
WAMPを入れろと、ゴーストは囁きますがw
ピンバック: Live WriterでWordpressの既存記事の編集が出来ない件 | トトといっしょ。
ピンバック: WordPressでWindowsLiveWriterが使えない人は試してみるべき策 | WordPress技術情報 | 株式会社チョイスOKUDA