克拉米斯遐想

Clamis的流水日记簿

解决WLW无法更新Blog分类目录问题

| 暂无评论 | 217次浏览

不记得从今年什么时候开始,Clamis的Windows Live Writer就无法正常的更新Blog的分类目录,每次点击更新的时候都会报错说:

从日志服务器接收的对 wp.getCategories 方法的响应无效: Invalid response document returned from XmlRpc server。

但是Clamis的wlw之前一直用的好好的啊,为什么就出了这个问题呢。Google之发现遇到这个问题的人还不少。总结下来一般是几个解决方法:

wlw_wrong.png

  1. WLW或者WordPress自身安装环境问题,重启WLW或者重新上传xmlrpc.php文件解决。——Clamis反复重启甚至在至少3台电脑2种OS(WinXP/Win7)下多次重装WLW,但是每次得到的都是该错误。而WordPress也重新上传xmlrpc.php以及整个WP重新更新过,依然无法解决;
  2. 这是WordPress的一个bug。在utf-8编码下,xml-rpc返回的格式不正确,缺了三个字节,所以wlw就会提示出错。——这个是网上对该问题相当主流的一个解释,而且貌似很多人也因此解决了问题。但是Clamis按照网上所说方法反复修改测试发现还是无法解决问题;
  3. 个别WordPress插件导致分类无法更新,禁用后解决问题。——Clamis的插件在相当长一段时间里面根本没有变过也没有升级过,而这些插件以前是可以用的。但是为了解决问题,Clamis还是将所有的插件全部禁止甚至删除,不幸的是该问题涛声依旧……
  4. 可能是有过新增分类操作,由于未知的原因导致了该问题,将新增的分类删除问题解决。——首先,Clamis没有新增过分类;其次,将最后增加的目录删除掉问题依旧;再次,将所有目录删除后重建,还是熟悉的错误提示框……

这个问题持续了很长的时间都没有解决,但是虽然无法更新类别可是WLW还是可以正常的发布博文,而Clamis常用的标签5个里面有4个之前已经更新进来了,所以Clamis也就没有太深入的研究这个问题,大不了需要发布在最后一个类别的时候从WP后台去手动改一下。
直到前两天的时候,Clamis又动了重装WLW试试看的念头,在查看版本的时候却无意发现原来WLW是有日志文件的,从“帮助”–>“关于Windows Live Writer”打开关于窗口,在窗口的左下角便有链接打开。wlw_about.png

赶紧打开日志查看错误,发现在更新类别的时候会有错误日志,而且非常详细(M$出品的东东在代码规范方面做得还是很好的:)。之前WLW提示的那个错误其实非常笼统,而日志显示错误实际原因是:There are multiple root elements. Line 103, position 2。可见日志不但指出了问题的真实原因是由于xmlrpc返回的XML文件有多个根节点,而且还指出了问题发生在该XML文件的103行。紧接着日志直接记录了返回的XML文件内容,找到其103行赫然发现了如下的HTML代码:

<div style=""text-align: center;""><div style=""position:relative; top:0; margin-right:auto;margin-left:auto; z-index:99999"">
<!-- Start of StatCounter Code -->
 <script type=""text/javascript"">
 var sc_project=0000000; 
 var sc_invisible=1; 
 var sc_partition=00; 
 var sc_click_stat=1; 
 var sc_security=""xxxxxxxx""; 
 </script>
 
 <script type=""text/javascript""
 src=""http://www.statcounter.com/counter/counter_xhtml.js""></script><noscript><div
 class=""statcounter""><a title=""iweb analytics""
 class=""statcounter""
 href=""http://www.statcounter.com/iweb/""><img
 class=""statcounter""
 src=""http://c.statcounter.com/0000000/0/xxxxxxxx/1/""
 alt=""iweb analytics"" /></a></div></noscript>
 <!-- End of StatCounter Code -->
</div></div>

这个明显不应该是属于xmlrpc返回的XML内容啊,而且这个显然是个站点计数代码。可是Clamis的WordPress是官方代码并未经修改过啊,而且也Clamis也没有包含StatCounter计数的插件啊~火石电光间一个念头闪进Clamis的脑海:一定是空间服务商增加的统计代码!

赶紧登入空间服务商提供的技术支持论坛,在里面果然发现其从今年的3月份开始就在所有免费空间的页面中加入了StatCounter的统计代码,该代码对于普通页面除了会略降低速度外无其他影响,但是对于xmlrpc来说却是一个致命的问题了。知道了病根就好治病了,给Admin发邮件要求去除统计代码(该空间的计数代码无法自行去除),Admin效率很高很快就给去掉了代码。再过了几个小时后(由于服务器页面缓存)问题得以解决,使用WLW更新类别等操作一切正常!

 

总结:

其实很多的免费空间服务商都会对其免费空间的页面增加计数代码,例如著名的000webhost也有加代码。这些代码一旦被加入到xmlrpc的返回XML中就肯定会导致WLW等离线博客编辑工具出现异常,包括在WLW中使用“打开”功能出现“服务器响应无效 – 从日志服务器接收的对 metaWeblog.getPost 方法的响应无效”错误很多时候也是由于这个问题所导致。而问题的解决办法就是去掉这些计数代码,有的服务商可以让用户自行去除(例如000webhost就提供了页面去自行去除统计代码,使用000webhost的TX可以点此链接自行去除),而有的服务商则需通过管理员去手动去除(例如Clamis使用的Zoka.cc就是)。如果你的空间服务商不允许去除计数代码,那就只能自己每次发布完自己去后台修改类别了,悲催……

而由于很多的免费空间都是使用的WordPress作为博客程序,所以这个问题经常被归结到WordPress身上。其实,WP很无辜……

作者:Clamis

我微笑着走向地狱,身后是正在毁灭的天堂

发表回复

*为必填字段!