WindowsLiveWriterで画像付きの記事をWordPressに投稿するとエラーになる

この記事は2年以上前に書いたものです。
そのため情報が古い可能性があります。ご了承ください。m(_ _)m

エラー内容は、↓。

ブログへの接続中にエラーが発生しました。

https://qos.dev7.net/wordpress/xmlrpc.php

基礎になる接続が閉じられました: 接続が予期せずに閉じられました

20110504_111518_1

C:\Users\User\AppData\Local\\
Live Writer.log
に、↓のExceptionが。

WindowsLiveWriter,1.5948,None,00017,04-May-2011 11:15:16.136,"XML-RPC request:
https://qos.dev7.net/wordpress/xmlrpc.php
<?xml version=""1.0"" encoding=""utf-8""?>
<methodCall>
 <methodName>metaWeblog.newMediaObject</methodName>
 <params>
  <param>
   <value>
    <string>1</string>
   </value>
  </param>
  <param>
   <value>
    <string>webmaster</string>
   </value>
  </param>
  <param>
   <value>[removed]</value>
  </param>
  <param>
   <value>
    <struct>
     <member>
      <name>name</name>
      <value>
       <string>xxxxxxxxxx.png</string>
      </value>
     </member>
     <member>
      <name>type</name>
      <value>
       <string>image/png</string>
      </value>
     </member>
     <member>
      <name>bits</name>
      <value>
       <base64>[25417 bytes]</base64>
      </value>
     </member>
    </struct>
   </value>
  </param>
 </params>
</methodCall>",""
WindowsLiveWriter,1.5948,None,00018,04-May-2011 11:15:16.136,"== BEGIN WebException =====================",""
WindowsLiveWriter,1.5948,None,00019,04-May-2011 11:15:16.136,"Status: ConnectionClosed",""
WindowsLiveWriter,1.5948,None,00020,04-May-2011 11:15:16.167,"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.5948,None,00021,04-May-2011 11:15:16.167,"== END WebException =======================",""
WindowsLiveWriter,1.5948,Fail,00022,04-May-2011 11:15:16.189,"WindowsLive.Writer.Extensibility.BlogClient.BlogClientConnectionErrorException: ネットワーク接続エラー - ブログへの接続中にエラーが発生しました。

https://qos.dev7.net/wordpress/xmlrpc.php

基礎になる接続が閉じられました: 接続が予期せずに閉じられました
   場所 WindowsLive.Writer.BlogClient.Clients.XmlRpcBlogClient.CallMethod(String methodName, XmlRpcValue[] parameters)
   場所 WindowsLive.Writer.BlogClient.Clients.MetaweblogClient.DoBeforePublishUploadWork(IFileUploadContext uploadContext)
   場所 WindowsLive.Writer.PostEditor.WeblogBlogFileUploader.DoUploadWorkBeforePublish(IFileUploadContext uploadContext)","   場所 System.Environment.GetStackTrace(Exception e, Boolean needFileInfo)
   場所 System.Environment.get_StackTrace()
   場所 WindowsLive.Writer.CoreServices.Diagnostics.LogFileTraceListener.Fail(String message)
   場所 System.Diagnostics.TraceInternal.Fail(String message)
   場所 System.Diagnostics.Trace.Fail(String message)
   場所 WindowsLive.Writer.PostEditor.WeblogBlogFileUploader.DoUploadWorkBeforePublish(IFileUploadContext uploadContext)
   場所 WindowsLive.Writer.PostEditor.BlogPostReferenceFixer.FileUploadWorker.DoUploadWork(String fileReference, BlogFileUploader fileUploader, Boolean isWindowsLiveLightboxCloneEnabled)
   場所 WindowsLive.Writer.PostEditor.BlogPostReferenceFixer.LocalFileTransformer.Transform(BeginTag tag, String reference)
   場所 WindowsLive.Writer.CoreServices.HTML.HtmlReferenceFixer.LocalFileReferenceFixupFilter.FixReferences(BeginTag tag, String reference)
   場所 WindowsLive.Writer.CoreServices.HTML.HtmlReferenceFixer.OnBeginTag(BeginTag tag)
   場所 WindowsLive.Writer.CoreServices.LightWeightHTMLDocumentIterator.Parse()
   場所 WindowsLive.Writer.CoreServices.HTML.HtmlReferenceFixer.FixReferences(TextWriter output, ReferenceFixer referenceFixer, ReferenceFixedCallback referenceFixed)
   場所 WindowsLive.Writer.CoreServices.HTML.HtmlReferenceFixer.FixReferences(String html, ReferenceFixer fixer, ReferenceFixedCallback referenceFixed)
   場所 WindowsLive.Writer.CoreServices.HTML.HtmlReferenceFixer.FixLocalFileReferences(String html, ReferenceFixer fixer, ReferenceFixedCallback referenceFixed)
   場所 WindowsLive.Writer.CoreServices.HTML.HtmlReferenceFixer.FixLocalFileReferences(String html, ReferenceFixer fixer)
   場所 WindowsLive.Writer.PostEditor.UpdateWeblogAsyncOperation.LocalSupportingFileUploader.UploadFilesBeforePublish()
   場所 WindowsLive.Writer.PostEditor.UpdateWeblogAsyncOperation.DoWork()
   場所 WindowsLive.Writer.CoreServices.AsyncOperation.InternalStart()
   場所 System.Threading.ThreadHelper.ThreadStart_Context(Object state)
   場所 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   場所 System.Threading.ThreadHelper.ThreadStart()"
WindowsLiveWriter,1.5948,Fail,00023,04-May-2011 11:15:16.221,"WindowsLive.Writer.Extensibility.BlogClient.BlogClientConnectionErrorException: ネットワーク接続エラー - ブログへの接続中にエラーが発生しました。

https://qos.dev7.net/wordpress/xmlrpc.php

基礎になる接続が閉じられました: 接続が予期せずに閉じられました
   場所 WindowsLive.Writer.BlogClient.Clients.XmlRpcBlogClient.CallMethod(String methodName, XmlRpcValue[] parameters)
   場所 WindowsLive.Writer.BlogClient.Clients.MetaweblogClient.DoBeforePublishUploadWork(IFileUploadContext uploadContext)
   場所 WindowsLive.Writer.PostEditor.WeblogBlogFileUploader.DoUploadWorkBeforePublish(IFileUploadContext uploadContext)
   場所 WindowsLive.Writer.PostEditor.BlogPostReferenceFixer.FileUploadWorker.DoUploadWork(String fileReference, BlogFileUploader fileUploader, Boolean isWindowsLiveLightboxCloneEnabled)
   場所 WindowsLive.Writer.PostEditor.BlogPostReferenceFixer.LocalFileTransformer.Transform(BeginTag tag, String reference)
   場所 WindowsLive.Writer.CoreServices.HTML.HtmlReferenceFixer.LocalFileReferenceFixupFilter.FixReferences(BeginTag tag, String reference)
   場所 WindowsLive.Writer.CoreServices.HTML.HtmlReferenceFixer.OnBeginTag(BeginTag tag)
   場所 WindowsLive.Writer.CoreServices.LightWeightHTMLDocumentIterator.Parse()
   場所 WindowsLive.Writer.CoreServices.HTML.HtmlReferenceFixer.FixReferences(TextWriter output, ReferenceFixer referenceFixer, ReferenceFixedCallback referenceFixed)
   場所 WindowsLive.Writer.CoreServices.HTML.HtmlReferenceFixer.FixReferences(String html, ReferenceFixer fixer, ReferenceFixedCallback referenceFixed)
   場所 WindowsLive.Writer.CoreServices.HTML.HtmlReferenceFixer.FixLocalFileReferences(String html, ReferenceFixer fixer, ReferenceFixedCallback referenceFixed)
   場所 WindowsLive.Writer.CoreServices.HTML.HtmlReferenceFixer.FixLocalFileReferences(String html, ReferenceFixer fixer)
   場所 WindowsLive.Writer.PostEditor.UpdateWeblogAsyncOperation.LocalSupportingFileUploader.UploadFilesBeforePublish()
   場所 WindowsLive.Writer.PostEditor.UpdateWeblogAsyncOperation.DoWork()
   場所 WindowsLive.Writer.CoreServices.AsyncOperation.InternalStart()","   場所 System.Environment.GetStackTrace(Exception e, Boolean needFileInfo)
   場所 System.Environment.get_StackTrace()
   場所 WindowsLive.Writer.CoreServices.Diagnostics.LogFileTraceListener.Fail(String message)
   場所 System.Diagnostics.TraceInternal.Fail(String message)
   場所 System.Diagnostics.Trace.Fail(String message)
   場所 WindowsLive.Writer.PostEditor.BlogPostEditingManager.UpdateWeblog(Boolean publish)
   場所 WindowsLive.Writer.PostEditor.BlogPostEditingManager.PostToWeblog(Boolean publish)
   場所 WindowsLive.Writer.PostEditor.BlogPostEditingManager.PublishAsDraft()
   場所 WindowsLive.Writer.PostEditor.PostEditorMainControl.commandPostAsDraft_Execute(Object sender, EventArgs e)
   場所 WindowsLive.Writer.ApplicationFramework.Command.RaiseEvent(Object eventKey, EventArgs e)
   場所 WindowsLive.Writer.ApplicationFramework.Command.OnExecute(EventArgs e)
   場所 WindowsLive.Writer.ApplicationFramework.Command.PerformExecute()
   場所 WindowsLive.Writer.ApplicationFramework.Command.PerformExecute(CommandExecutionVerb verb, PropertyKeyRef key, PropVariantRef currentValue, IUISimplePropertySet commandExecutionProperties)
   場所 WindowsLive.Writer.ApplicationFramework.CommandManager.Execute(UInt32 commandId, CommandExecutionVerb verb, PropertyKeyRef key, PropVariantRef currentValue, IUISimplePropertySet commandExecutionProperties)
   場所 System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
   場所 System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
   場所 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
   場所 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
   場所 System.Windows.Forms.Application.Run(Form mainForm)
   場所 WindowsLive.Writer.ApplicationFramework.SatelliteApplicationForm.Launcher.ThreadMain(Object[] parameters)
   場所 WindowsLive.Writer.CoreServices.Threading.ThreadStartWithParams.Run()
   場所 System.Threading.ThreadHelper.ThreadStart_Context(Object state)
   場所 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   場所 System.Threading.ThreadHelper.ThreadStart()"
WindowsLiveWriter,1.5948,None,00024,04-May-2011 11:15:16.239,"DisplayableException occurred: WindowsLive.Writer.Extensibility.BlogClient.BlogClientConnectionErrorException: ネットワーク接続エラー - ブログへの接続中にエラーが発生しました。

https://qos.dev7.net/wordpress/xmlrpc.php

基礎になる接続が閉じられました: 接続が予期せずに閉じられました
   場所 WindowsLive.Writer.BlogClient.Clients.XmlRpcBlogClient.CallMethod(String methodName, XmlRpcValue[] parameters)
   場所 WindowsLive.Writer.BlogClient.Clients.MetaweblogClient.DoBeforePublishUploadWork(IFileUploadContext uploadContext)
   場所 WindowsLive.Writer.PostEditor.WeblogBlogFileUploader.DoUploadWorkBeforePublish(IFileUploadContext uploadContext)
   場所 WindowsLive.Writer.PostEditor.BlogPostReferenceFixer.FileUploadWorker.DoUploadWork(String fileReference, BlogFileUploader fileUploader, Boolean isWindowsLiveLightboxCloneEnabled)
   場所 WindowsLive.Writer.PostEditor.BlogPostReferenceFixer.LocalFileTransformer.Transform(BeginTag tag, String reference)
   場所 WindowsLive.Writer.CoreServices.HTML.HtmlReferenceFixer.LocalFileReferenceFixupFilter.FixReferences(BeginTag tag, String reference)
   場所 WindowsLive.Writer.CoreServices.HTML.HtmlReferenceFixer.OnBeginTag(BeginTag tag)
   場所 WindowsLive.Writer.CoreServices.LightWeightHTMLDocumentIterator.Parse()
   場所 WindowsLive.Writer.CoreServices.HTML.HtmlReferenceFixer.FixReferences(TextWriter output, ReferenceFixer referenceFixer, ReferenceFixedCallback referenceFixed)
   場所 WindowsLive.Writer.CoreServices.HTML.HtmlReferenceFixer.FixReferences(String html, ReferenceFixer fixer, ReferenceFixedCallback referenceFixed)
   場所 WindowsLive.Writer.CoreServices.HTML.HtmlReferenceFixer.FixLocalFileReferences(String html, ReferenceFixer fixer, ReferenceFixedCallback referenceFixed)
   場所 WindowsLive.Writer.CoreServices.HTML.HtmlReferenceFixer.FixLocalFileReferences(String html, ReferenceFixer fixer)
   場所 WindowsLive.Writer.PostEditor.UpdateWeblogAsyncOperation.LocalSupportingFileUploader.UploadFilesBeforePublish()
   場所 WindowsLive.Writer.PostEditor.UpdateWeblogAsyncOperation.DoWork()
   場所 WindowsLive.Writer.CoreServices.AsyncOperation.InternalStart()",""

System.Net.HttpWebRequest.GetResponse()でException?
ってことは、-RPC request投げた後に、Response取得タイミングで切断されたってこと??

tcpdumpで、パケットキャプチャ

# tcpdump -i bge0 -x -w http_dump.cap -s 1600 'port 80 and host xxx.xxx.xxx.xxx'

して、解析してみたところ、たしかにXML-RPC requestの後、サーバ側が切断している模様だった。

サーバ側に問題があるようなので、
自体にログ埋め込んで見ることに。

まず、xmlrpcのloggingを有効に。
安全のためにログファイルの場所も変更。(外部から見えない場所に変更)

wordpress/xmlrpc.

/**
 * Whether to enable XMLRPC Logging.
 *
 * @name xmlrpc_logging
 * @var int|bool
 */

$xmlrpc_logging = 1;

/**
 * logIO() - Writes logging info to a file.
 *
 * @uses $xmlrpc_logging
 * @package WordPress
 * @subpackage Logging
 *
 * @param string $io Whether input or output
 * @param string $msg Information describing logging reason.
 * @return bool Always return true
 */

function logIO($io,$msg) {
    global $xmlrpc_logging;
    if ($xmlrpc_logging) {
//      $fp = fopen("../xmlrpc.log","a+");
        $fp = fopen("/tmp/xmlrpc.log","a+");

このlogIOを、あっちこっちに埋めて行った結果、
wordpress/wp-includes/media.php の wp_load_image で異常終了してた。

/**
 * Load an image from a string, if PHP supports it.
 *
 * @since 2.1.0
 *
 * @param string $file Filename of the image to load.
 * @return resource The resulting image resource on success, Error string on failure.
 */

function wp_load_image( $file ) {
    if ( is_numeric( $file ) )
        $file = get_attached_file( $file );

    if ( ! file_exists( $file ) )
        return sprintf(__('File &#8220;%s&#8221; doesn&#8217;t exist?'), $file);

    if ( ! function_exists('imagecreatefromstring') )
        return __('The GD image library is not installed.');

    // Set artificially high because GD uses uncompressed images in memory
    @ini_set('memory_limit', '256M');
    $image = imagecreatefromstring( file_get_contents( $file ) );

厳密に言うと、imagecreatefromstringで。

画像つき記事の投稿に失敗する原因は分かったけど、対処方法が分からなかったので、
GDではなくを使うように、プラグイン「ImageMagick Engine」を導入。
これでようやく、画像つき記事の投稿が出来るようになった。

カテゴリー: ソフトウェア タグ: , , , , , , , , パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です