Windows Live WriterがMy Metaweblog APIプロバイダーと協力していないのはなぜですか?
-
21-09-2019 - |
質問
私は、とりわけ、Metaweblog APIを介してブログを提供するWebサイトを開発しています。私はいくつかのブログクライアントと非常にうまく機能しているAPIを手に入れましたが、Windows Live Writerは私を殺しています。
実際の前後トラフィックをキャプチャするためにネットワークトレースを作成しました。これが結果です:
WLWは、ブログのURL、ユーザー名、パスワードを要求します。 URLは/item/list/type/blog/user/1/bloguser/1です。これを提供します。
WLWがそのURLに対してHTTPリクエストを行っているのがわかります。応答が得られます。その応答には、RSDとWLWMANIFESTリンクタグの両方が含まれます。
WLWからの次のリクエストは/MWAPI/RSD/Bloguser/1の場合です。これは正しいURLです。
応答は、MetaWeblog RSD応答です。
<?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はエラーを表示しました - 「オブジェクト参照はオブジェクトのインスタンスに設定されていません。」繰り返しますが、実際の応答データには期間が含まれていません。これが、ネットワークモニターがキャリッジリターンを表す方法です。
テストハーネスからテストコールを行ってきましたが、同一の応答で正常に動作しています。そして、私が言ったように、それは他のブログクライアントと協力しています。ヘルプ。
解決
WLWは、MWAの実装について非常にうるさいようです。メソッド名の1つを正しく大文字にしていませんでした。