Bin*_*fit 7 c# web-services webclient asmx http-post
背景
我正在开发一个ASP.Net服务器端控件,需要与ASMX Web服务进行通信.服务器端控件使用WebClient对象与Web服务进行通信,因为它需要经常在各种应用程序中重用,并且为了使开发人员更容易,他们不需要创建对Web服务的服务引用.
履行
在使用控件期间,需要将序列化对象发送到Web服务.使用the XmlSerializer对序列化对象,然后使用chilkat压缩库压缩生成的XML字符串.控件的Web服务调用如下所示:
webClient.UploadStringAsync(new Uri(serviceHost + serviceMethod), "POST", sendData)
sendData(string)的内容是compressedResponse={CompressedData}.
Web服务有一个定义如下的方法来接收数据,然后使用chilkat库解压缩字符串值,然后使用该序列对对象进行反序列化XmlSerializer.
public void SaveResponse(string compressedResponse)
控制和服务之间的通信正在进行.最初web.config,在上述任何一项中都没有定义任何设置或绑定.初步搜索后,我确实添加了
<httpRuntime maxRequestLength="20480"/>
客户端和服务器web.config文件.这没有任何区别.
问题
压缩或未压缩在sendData变量中发布到Web服务的数据对于正常的POST请求来说很大,并且已损坏.在以压缩格式将字符串发布到服务器之前和之后检查字符串的最后几个字符时,会确认这一点,并且在解压缩时,Xml文档在检入调试器时缺少最后一个根标记.在string无法解压缩,因此,服务调用失败每次.
如何增加WebClient请求的POST大小以确保服务器收到完整的字符串?
我已经查看了Google上的各种选项,但没有一个能够给我一个足够好的样本,可以在哪里进行更改,或者样本的变化需要看起来像.我完全不知道是否需要在服务器或消费网站上进行更改,并且因为没有为此定义绑定,如何在web.configASMX HTTP服务调用中创建绑定.
我相信你必须达到ASP.NET最大请求长度限制.您可以通过配置文件修改,例如:
<system.web>
<httpRuntime executionTimeout="240" maxRequestLength="20480" />
</system.web>
Run Code Online (Sandbox Code Playgroud)
maxRequestLength值以KB为单位,因此上面的设置允许20 MB.您也可以使用位置标记将设置仅应用于选定的URL,例如
<location path="yourservice.asmx">
<system.web>
<httpRuntime executionTimeout="240" maxRequestLength="20480" />
</system.web>
</location>
Run Code Online (Sandbox Code Playgroud)
仅启用 HttpPost 时,似乎无法更改 ASMX Web 服务的 POST 大小。
最终的解决方案是将服务切换为运行 HttpSoap 并创建对包含控件的程序集的服务引用。完成后,一旦通过属性设置端点,就会使用控件中的代码创建绑定。
| 归档时间: |
|
| 查看次数: |
14975 次 |
| 最近记录: |