为什么Windows Live Writer不能与我的MetaWebLog API提供程序一起使用?

时间:2009-11-23 21:34:21

标签: windows-live-writer metaweblog

我正在开发一个网站,其中包括通过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显示错误 - “对象引用未设置为对象的实例”。同样,实际的响应数据不包括周期 - 这就是网络监视器如何表示回车。

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

1 个答案:

答案 0 :(得分:1)

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