WebService 操作超時的問題及其解決辦法
在執行 WebService 某些方法時會消耗較長的時間,當超出系統預設的時間長度時,系統就會報錯。此時可做如下處理:
1、修改 app.config 檔案,新增如下程式碼:
<httpRuntime executionTimeout="600" />
請求執行超時時間為600秒(預設為110秒)
2、設定 Web services 的 Timeout 屬性
對 XML Web services 的同步呼叫的超時(以毫秒為單位)。預設為 100000 毫秒。
lywSqCommon.sqsdData.GetData getData = new lywSqCommon.sqsdData.GetData();//GetData 為類名
getData.Timeout=700000;//單位為毫秒
指示 XML Web services 客戶端等待同步 XML Web services 請求完成的時間(以毫秒計)。
提示:如果將 Timeout 屬性設定為 Timeout.Infinite,則指示該請求無超時。即使 XML Web services 客戶端可以將 Timeout 屬性設定為無超時,Web 伺服器仍可以在伺服器端使請求超時。
系統將以上面兩項設定的最小者作為操作超時的時間長度。
1. 伺服器端設定超時
在 web.config 的 system.web 裡新增如下配置項:
< httpRuntime
executionTimeout="30"
/>
以上時間單位是秒.
記得要把 web.config 的 debug 模式關閉:
< compilation
defaultLanguage="c#"
debug="false"
/>
2. 客戶端設定超時
在 WebService 的客戶端代理程式(用 wsdl.exe 生成)裡設定 Request 超時時間, 單位是毫秒:
protected override WebRequest GetWebRequest(Uri uri)
{
HttpWebRequest wr = (HttpWebRequest)base.GetWebRequest( uri );
wr.Timeout = 30*1000;
return wr;
}