Azure Cloud Service"远程服务器返回错误:(413)请求实体太大。"

时间:2014-08-11 04:34:32

标签: c# wcf azure

我有一个Azure Cloud Service,它托管一个非常简单的WCF服务。

该服务有一个接受HTML输入字符串的方法,它将HTML呈现为PDF格式,并将生成的PDF作为byte []返回。

我从Azure网站调用此服务,它适用于少量到中等量的HTML,但是当HTML变得更长时,我从服务器返回以下错误:

The remote server returned an error: (413) Request Entity Too Large.

我在Azure WCF服务上的配置如下:

<system.serviceModel>
<bindings>
  <basicHttpBinding>
    <binding name="LargeSettings" maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" sendTimeout="00:05:00" receiveTimeout="00:05:00">
      <readerQuotas maxDepth="20000000" maxStringContentLength="12000" maxArrayLength="21504000" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
      <security mode="None" />
    </binding>
  </basicHttpBinding>
</bindings>
<services>
  <service name="PDFSrvcRole.PDFSrvc">
    <endpoint bindingConfiguration="LargeSettings" name="PDFSrvcRole.PDFSrvc" address="http://xxxxx.cloudapp.net/PDFSrvc.svc" binding="basicHttpBinding" contract="PDFSrvcRole.IPDFSrvc" />
  </service>
</services>

1 个答案:

答案 0 :(得分:0)

Grrrrrrr!

现在它已全部排序了,所以学习了一些。

首先,是的Azure WCF服务确实有效,但配置起来很麻烦。 但这更多是对WCF的批评,而不是Azure。

我必须做一些事情才能让这个工作......

我创建了一个全新的Windows桌面应用程序,这使我更容易调试目标服务并使配置正常工作。

我还需要在WCF服务上打开customErrors mode =“Off”,这样我才能看到发生了什么。

然后我遇到了问题 但我了解到保持此密钥并将其设置为true似乎很重要。如果您没有此密钥,请将其添加。

然后它要求一个相对地址(或空白),因为我启用了上面的键,所以我设置地址=&#34;&#34;因为相对价值如&#34; Service.svc&#34;没有工作,增加了额外的复杂性,这是一种痛苦。

然后我添加了transferMode =&#34;流式传输&#34;到正在调用该服务的客户端。这适用于Windows应用程序以及Azure上托管的网站。调用此服务的任何内容都需要将该设置设置为流式传输。

启用它会导致出现另一个错误,告诉我maxStringContentLength的值为12000不够长。然后我把它增加到大约5千亿。

然后它工作了!!!完美,没有更多错误,我现在可以上传任何大小的请求。

现在我需要减少这些数字以降低DOS攻击的风险等。

这是一个传奇故事,但最终结果确实很好,因为它已全部设置。