[英]How to increase the POST size for an ASMX web service?
背景
我正在開發一個ASP.Net服務器端控件,需要與ASMX Web服務進行通信。 服務器端控件使用WebClient
對象與Web服務進行通信,因為它需要經常在各種應用程序中重用,並且為了使開發人員更容易,他們不需要創建對Web服務的服務引用。
履行
在使用控件期間,需要將序列化對象發送到Web服務。 使用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.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服務的POST大小。
最后的解決方案是將服務切換到運行HttpSoap並創建對包含該控件的程序集的服務引用。 完成后,一旦通過屬性設置端點,就會使用控件中的代碼創建綁定。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.