带有WCF和流的FileUpload在本地工作但在Azure中失败

时间:2012-09-27 12:10:08

标签: wcf azure upload stream

我在Azure 4.0中运行的ASP.NET 4.0 WebSite中实现了一个文件上载。对WCF服务的AJAX调用在本地工作正常,但是当我将其部署到Azure时,它失败并出现以下异常:

System.Web.HttpException 无法使用Request.BufferlessInputStream,因为已经读取了Request的内容。

在以下行:

HttpContext.Current.Request.GetBufferlessInputStream().Read(COMPLETEBufferedFileContent, 0, fileContentLength);

我的WebService-Method声明如下:

public Stream UploadProfileImage()

我的服务配置的一部分如下:

<bindings>
  <customBinding>
    <binding name="NiPDefaultCustomBinding" 
             openTimeout="00:01:00" 
             closeTimeout="00:01:00" 
             sendTimeout="00:01:00" 
             receiveTimeout="00:01:00" >   
      <sslStreamSecurity/>    
      <webMessageEncoding webContentTypeMapperType="XXXMapperForStreamInParamAndJSON, AssemblyX">
        <readerQuotas maxArrayLength="16384"
                      maxBytesPerRead="4096"
                      maxDepth="32"
                      maxNameTableCharCount="16384"
                      maxStringContentLength="8192" />
      </webMessageEncoding>    
      <httpsTransport maxBufferPoolSize="524288"
                      maxBufferSize="65536" 
                      maxReceivedMessageSize="6291456" 
                      transferMode="Streamed" 
                      manualAddressing="true">       
      </httpsTransport>
    </binding>
  </customBinding>

我的XXXMapperForStreamInParamAndJSON重写了GetMessageFormatForContentType()并在此场景中返回WebContentFormat.Raw。

我知道我正在使用流式传输,但缓存了对流式传输没有意义的完整内容,但在这种情况下它没有问题,因为我用这种方法上传图像,我需要创建一个缩略图,所以我需要在缓冲区/内存中完成位图。

我不访问.Form,.Files或.InputStream或Request-Object中的任何其他相关内容,所以我不明白为什么调用在azure中失败,但在本地工作。一切都是100%相同。

有人可以帮助我吗?

拜托,有人给我一个提示吗?这个问题非常困难,我解决这个问题非常重要,因为否则我有一天无法上网。

0 个答案:

没有答案