工作熊自己一直很依賴【Windows Live Writer 2011(WLW)】(現已改為 Open Live Writer)這套離線部落格寫作工具來發表部落格文章,這兩天也不知做了什麼動作,居然無法再使用WLW連接上我的部落格,總共出現兩種訊息:
【嘗試登入時,發生未預期的錯誤:網路連線錯誤 – 嘗試連線至部落格時發時錯誤:基礎連接已關閉:連接意外關閉】
以及
【嘗試登入時,發生未預期的錯誤:無效的伺服器回應 – 收到部落格伺服器對於 blogger.getUsersBlogs 方法的無效回應:Invalid response document returned from XmlRpc server】。
在網路上找了半天也沒有發現有人提出什麼有效的解決方案,後來工作熊也嘗試了下列順序的修復動作,但都沒有效果:
- 停掉所有的外掛程式:錯誤依舊存在。
- 將WordPress升級到最新的 WordPress 3.8,工作熊原來用的是3.5版:錯誤依舊存在。 (就算Wordpress的版本已經是最新了,還是建議重新安裝一次最新版本)
- 參考這篇文章【已解決:WLW無效的伺服器回應(Invalid response document returned from XmlRpc server)】,修改class-IXR.php程式碼,增加字串長度3~9:錯誤依舊存在。 (2014/02/03後來發現其他部落格也會有這樣的問題,只到執行這個步驟就可以解決)
在工作熊即將放棄的時候,突然靈光一閃,如果把class-IXR.php及xmlrpc.php改回舊的程式碼,是否有效,因為從錯誤訊息看起來應該在帳號登入的地方就錯了。所以又試了下面的步驟,最後僥倖解決了問題:
-
將class-IXR.php改回Wordpress3.5的舊程式碼並增加字串:仍然有錯誤,但錯誤訊息變了。再將class-IXR.php回復成最新版。
- 將xmlrpc.php程式碼改回Wordpress3.5的舊程式碼:賓果,問題解決了。但是工作熊依然不知道發生了什麼問題。
下面是Windows Live Writer的log紀錄檔所顯示的訊息。
WindowsLiveWriter,1.9692,None,00066,15-Jan-2014 16:27:38.791,”XML-RPC request:
http://www.yourblog.com/xmlrpc.php
<?xml version=””1.0″” encoding=””utf-8″”?>
<methodCall>
<methodName>blogger.getUsersBlogs</methodName>
<params>
<param>
<value>
<string>0123456789ABCDEF</string>
</value>
</param>
<param>
<value>
<string>yourname</string>
</value>
</param>
<param>
<value>[removed]</value>
</param>
</params>
</methodCall>”,””
WindowsLiveWriter,1.9692,None,00067,15-Jan-2014 16:27:38.791,”== BEGIN WebException =====================”,””
WindowsLiveWriter,1.9692,None,00068,15-Jan-2014 16:27:38.791,”Status: ConnectionClosed”,””
WindowsLiveWriter,1.9692,None,00069,15-Jan-2014 16:27:38.791,”System.Net.WebException: 基礎連接已關閉: 連接意外關閉。
於 System.Net.HttpWebRequest.GetResponse()
於 WindowsLive.Writer.CoreServices.HttpRequestHelper.SendRequest(String requestUri, HttpRequestFilter filter)
於 WindowsLive.Writer.CoreServices.XmlRpcClient.CallMethod(String methodName, XmlRpcValue[] parameters)
於 WindowsLive.Writer.BlogClient.Clients.XmlRpcBlogClient.CallMethod(String methodName, XmlRpcValue[] parameters)”,””
WindowsLiveWriter,1.9692,None,00070,15-Jan-2014 16:27:38.791,”== END WebException =======================”,””
WindowsLiveWriter,1.9692,None,00071,15-Jan-2014 16:27:38.809,”Creating a writable ribbon istream for C:\Users\yourname\AppData\Roaming\Windows Live Writer\Ribbon.dat”,””
WindowsLiveWriter,1.9692,None,00072,15-Jan-2014 16:27:41.139,”Creating a writable ribbon istream for C:\Users\yourname\AppData\Roaming\Windows Live Writer\Ribbon.dat”,””
WindowsLiveWriter,1.9692,None,00073,15-Jan-2014 16:27:44.979,”Creating a writable ribbon istream for C:\Users\yourname\AppData\Roaming\Windows Live Writer\Ribbon.dat”,””
後來工作熊將兩個WordPress版本(3.5與3.8)新舊xmlrpc.php程式碼做了一下的比較,發現有下列的不同:
WordPress 3.5 | WordPress 3.8 |
if ( isset ( $GET[‘rsd’] ) ) { // http://archipelago.phrasewise.com/rsd | if ( isset ( $GET[‘rsd’] ) ) { // http://cyber.law.harvard.edu/blogs/gems/tech/rsd.html |
<api name=”WordPress” blogID=”1″ preferred=”true” apiLink=”<?php echo site_url(‘xmlrpc.php’, ‘rpc’) ?>” /> | <?php /** * Add additional APIs to the Really Simple Discovery (RSD) endpoint. * * @see http://cyber.law.harvard.edu/blogs/gems/tech/rsd.html * @since 3.5.0 */ do_action( ‘xmlrpc_rsd_apis’ ); |
rsd的連接網址變了,不知道這是不是主要原因? 猜想這個情形也可能只是工作熊個人的問題,因為我所使用的版型可能比較舊。
延伸閱讀:
[已解決]WordPress登入顯示空白問題-更改wp-config.php
解決錯誤訊息:無法找到 WordPress Content 目錄(wp-content)
如何解決WordPress “Error establishing a database connection(建立資料庫連線時發生錯誤)”
Leave a Reply