私は、とりわけMetaweblogAPIを介してブログを提供するWebサイトを開発しています。APIはいくつかのブログクライアントで非常にうまく機能していますが、WindowsLiveWriterは私を殺しています。
実際の前後のトラフィックをキャプチャするためにネットワークトレースを実行しました。結果は次のとおりです。
WLWは、ブログのURL、ユーザー名、およびパスワードを要求します。URLは/item/ list / type / blog / user / 1 / bloguser / 1で、これを提供します。
WLWがそのURLに対してHTTPリクエストを行うのがわかります。応答があります。その応答には、RSDとwlwmanifestリンクタグの両方が含まれます。
WLWからの次のリクエストは、正しいURLである/ mwapi / rsd / bloguser/1に対するものです。
応答はMetaWeblogRSD応答です。
<?xml version="1.0" encoding="UTF-8"?>
<rsd version="1.0" xmlns="http://archipelago.phrasewise.com/rsd">
<service>
<engineName>Cahoots2</engineName>
<engineLink>http://sourceforge.net/projects/cahoots/</engineLink>
<homePageLink>http://10.0.1.39:8888</homePageLink>
<apis>
<api name="MetaWeblog" blogID="1" preferred="true" apiLink="http://10.0.1.39:8888/mwapi/index" />
</apis>
</service>
</rsd>
WLWからの次のリクエストは/mwapi/indexです。これは、blogger.getUsersBlogsへのメソッド呼び出しです。リクエストは次のとおりです。
.<?xml version="1.0" encoding="utf-8"?>..
<methodCall>.. <methodName>blogger.getUsersBlogs</methodName>..
<params>.. <param>.. <value>..
<string>ffffffabffffffce6dffffff93ffffffac29ffffffc9fffffff826ffffffdeffffffc9ffffffe43c0b763036ffffffa0fffffff3ffffffa963377716</string>..
</value>..
</param>..
<param>..
<value>..
<string>CommunityAdmin</string>..
</value>..
</param>..
<param>..
<value>..
<string>password</string>..
</value>..
</param>.. </params>..</methodCall>
期間を許しなさい; それらはキャリッジリターンです。これをネットワークトレースから取得しています。
サーバーからの応答もXMLです。
.<?xml version="1.0" encoding="UTF-8"?>.<methodResponse><params><param><value>
<struct><member><name>blogid</name><value><int>1</int>
</value></member><member><name>url</name><value>
<string>http://10.0.1.39:8888/item/list/type/blog/user/1/bloguser/1</string>
</value></member><member><name>blogname</name><value>
<string>CommunityAdmin @ Cahoots!</string></value></member></struct></value>
</param></params></methodResponse>.
これは私には正しいように見えます。BlogIDが正しく、URLが正しく、ブログ名が正しい。
次に、WLWは元のgetUsersBlogsメソッド呼び出しを繰り返します。同一の応答が得られます。
次に、WLWは、「アカウントへの接続は成功しましたが、サーバーは現在アクティブなブログがないことを報告しました。続行する前に、このプロバイダーのアカウントが最新であることを確認してください。」と表示します。
WLWは、ここで説明したもの以外のHTTP要求を行いませんでした。
私が間違っていることは何でも手がかりはありますか?wlwmanifest.xmlファイルが使用可能であることを確認しました。実際、 wlwmanifest.xml(/this/is/not/it/wlwmanifest.xmlなど)を要求しても、正しいファイルが返されます。
編集:getUsersBlogsメソッドから配列を返さないことに気づきました。これを変更したとき、メソッド呼び出しからのHTTP応答は次のとおりでした。
.<?xml version="1.0" encoding="UTF-8"?>.<methodResponse><params><param><value><array><data><value>
<struct><member><name>blogid</name><value><int>1</int></value></member>
<member><name>url</name><value>
<string>http://10.0.1.39:8888/item/list/type/blog/user/1/bloguser/1</string>
</value></member><member><name>blogname</name><value>
<string>CommunityAdmin @ Cahoots!</string></value></member></struct></value>
</data></array></value></param></params></methodResponse>.
これは、サンプル応答としてhttp://msdn.microsoft.com/en-us/library/aa905665.aspxで説明されているものと同じように見えます。しかし、WLWはエラーを表示しました-「オブジェクト参照がオブジェクトのインスタンスに設定されていません」。繰り返しになりますが、実際の応答データには期間が含まれていません。これが、NetworkMonitorがキャリッジリターンを表す方法です。
テストハーネスからテストコールを実行しましたが、同じ応答で正常に機能しています。そして、私が言ったように、それは他のブログクライアントと協力しています。ヘルプ。