4

我正在开发一个网站,除其他外,它通过 Metaweblog API 提供博客。我已经让 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 显示错误 - “对象引用未设置为对象的实例。” 同样,实际的响应数据不包括句点——这正是网络监视器表示回车的方式。

我已经从测试工具完成了测试调用,并且它在相同的响应下运行良好。而且,正如我所说,它正在与其他博客客户合作。帮助。

4

1 回答 1

1

WLW 似乎对 MWA 的实现非常挑剔。我没有正确大写其中一个方法名称。

于 2009-12-05T18:46:03.330 回答