我有一个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>
答案 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攻击的风险等。
这是一个传奇故事,但最终结果确实很好,因为它已全部设置。