2016-09-10 3 views
0

大きなファイルを入力として受け入れるコントローラを備えたOWINセルフホストWebAPIがあります。このコードは、問題やエラーなしにPCで動作します。ただし、OSXのMONOでは、メッセージはChromeのハングモードのままです。 Base64文字列を使って小さなサイズのファイルを提供すると、呼び出しが終了します。これは、サイズが1.5 MBのファイルが、OSXのMONOのPOSTの許容できるBase64メッセージサイズではないと結論づけました。Mono OSX Owin Web APIセットアップ - MaxMessageSizeを設定するには?

しかし、私はHttpRunTimeのギグにmaxContentSizeを使ってみましたが、MaxRequestSizeInBytesをGigに設定してOWINミドルウェアの実装を試みました。これらの両方で、ファイルをWeb APIコントローラーにPOSTしたり、要求を保留状態にしておくことはできませんでした。

最大メッセージサイズを設定するための他のアイデアがある場合、またはサイズが1.5 MBのMONO防止ファイルに何かがあるかどうかを知りたい場合は教えてください。

答えて

0

私はOwinMiddlewareを使用してMACの回避策を見つけました。メッセージサイズを増やしても機能しませんでしたが、解決策の下ではメッセージサイズの制限(最大65K)をバイパスできます。

public override async Task Invoke(IOwinContext context) 
      { 
       try 
       { 
        IOwinRequest request = context.Request; 

        if (request.Path.HasValue && request.Path.Value.Contains("METHODNAMEFORLARGEFILE")) 
        { 
         //TODO: Remove Workaround for MAC to explicitly download whole stream to avoid issues with message size. PC works without this workaround. 
         LogHelper.Logger.Info("OWIN METHODNAMEFORLARGEFILE Request"); 
         var stream = request.Body; 

         string requestBody = await (new StreamReader(stream)).ReadToEndAsync(); 

         var requestData = Encoding.UTF8.GetBytes(requestBody); 
         context.Request.Body = new MemoryStream(requestData); 
        } 

        await Next.Invoke(context); 
       } 
       catch(Exception ex) 
       { 
        LogHelper.Logger.Error(ex.Message, ex); 
        throw ex; 
       } 
      } 
関連する問題