C# 如何增加ASMX web服务的帖子大小?

C# 如何增加ASMX web服务的帖子大小?,c#,web-services,asmx,webclient,http-post,C#,Web Services,Asmx,Webclient,Http Post,背景 我正在开发一个ASP.Net服务器端控件,该控件需要与ASMX web服务通信。服务器端控件使用WebClient对象与web服务通信,因为它需要在各种应用程序中经常重用,并且为了使开发人员更容易使用,他们不需要创建对web服务的服务引用 实施 在使用控件的过程中,需要向web服务发送序列化对象。使用XmlSerializer序列化对象,然后使用chilkat压缩库压缩生成的XML字符串。控件的web服务调用如下所示: webClient.UploadStringAsync(新Uri(se

背景

我正在开发一个ASP.Net服务器端控件,该控件需要与ASMX web服务通信。服务器端控件使用
WebClient
对象与web服务通信,因为它需要在各种应用程序中经常重用,并且为了使开发人员更容易使用,他们不需要创建对web服务的服务引用

实施

在使用控件的过程中,需要向web服务发送序列化对象。使用
XmlSerializer
序列化对象,然后使用chilkat压缩库压缩生成的XML字符串。控件的web服务调用如下所示:

webClient.UploadStringAsync(新Uri(serviceHost+serviceMethod),“POST”,sendData)

sendData(
string
)的内容是
compressedResponse={CompressedData}

web服务有一个定义如下的方法,用于接收数据,然后使用chilkat库解压缩字符串值,然后使用
XmlSerializer
反序列化对象

public void SaveResponse(字符串压缩响应)

控件和服务之间的通信正在工作。最初,在
web.config
中没有为上述任何一项定义任何设置或绑定。在最初的搜索之后,我添加了

客户端和服务器
web.config
文件。这没有什么区别

问题

压缩或未压缩
sendData
变量中发布到web服务的数据对于正常的POST请求来说太大,并且已损坏。在以压缩格式发布到服务器之前和之后检查字符串的最后几个字符时会确认这一点,在调试器中检查时,Xml文档缺少最后一个根标记。无法解压缩
字符串
,因此每次服务调用都会失败

如何增加
WebClient
请求的帖子大小,以确保服务器收到完整的字符串?


我已经看过谷歌上的各种选项,但是没有一个能给我提供足够好的示例,说明在哪里进行更改,或者更改需要什么样的示例。我完全不知道是需要在服务器上还是在消费网站上进行更改,因为没有为此定义绑定,如何在
web.config
中为ASMX HTTP服务调用创建绑定。

我相信您一定达到了ASP.NET最大请求长度限制。您可以通过以下配置文件修改:

<system.web>
  <httpRuntime executionTimeout="240" maxRequestLength="20480" />
</system.web>

maxRequestLength值以KB为单位,因此上述设置将允许20 MB。您还可以使用位置标记仅将设置应用于选定的URL,例如

<location path="yourservice.asmx">
    <system.web>
        <httpRuntime executionTimeout="240" maxRequestLength="20480" />
    </system.web>
</location>

如果仅启用HttpPost,则似乎无法更改ASMX Web服务的帖子大小


最终的解决方案是将服务切换到运行HttpSoap,并创建对包含控件的程序集的服务引用。完成后,通过属性设置端点后,将使用控件中的代码创建绑定。

我应该补充一个问题,即我已经为客户端
web.config
和服务器
web.config
设置了绑定。我已更新问题以反映这一点+1然而,对于详细的答案,@Diago,你有什么特别的错误吗?你能分享这些细节吗?@Diago,我也很好奇你是如何将压缩数据(大概是字节数组格式)转换成字符串的。您需要在收到后应用反向转换。Base64在这里是将压缩数据编码为字符串的一个很好的候选者。即使添加了try-catch,也没有特定的错误。压缩和解压缩是使用chilkat库完成的,字符串转换是正确的。用于发送和接收数据的库在接收数据时工作正常,并且使用相同的发送方法。主要区别在于过去发送给服务的单个值,现在它接收一个完整的对象。如果我找不到解决方法,我可能会被迫返回到旧方法。作为参考,解压字符串的代码是
decodedString=gzipEngine.InflateStringENC(compressedData,“windows-1252”,“base64”)
是什么让你相信字符串太长的?只是因为它不能被解压?“在《小提琴手》中是什么样子的?”约翰我用信息更新了这个问题。通过复制post前的最后几个字符并根据post字符串验证,对压缩字符串执行基本检查。发送未压缩的Xml文档还表明最终的根标记丢失,并且在检入调试器时在中途被切断。