我們有一個SLA,第三方RESTfull Web服務必須在5秒內返回響應。否則,我們需要中止服務調用並執行業務邏輯的其他部分。Web Service調用如何等待N秒鐘並終止
有人可以幫助我如何實現使用C#.Net。
我們有一個SLA,第三方RESTfull Web服務必須在5秒內返回響應。否則,我們需要中止服務調用並執行業務邏輯的其他部分。Web Service調用如何等待N秒鐘並終止
有人可以幫助我如何實現使用C#.Net。
讓我通過提供前面提供的「標準免責聲明」來說明我的答案,即我要在此提供的練習的一部分被認爲是不好的,因爲可能涉及非託管代碼的問題。隨着中說,這裏是一個答案:
void InitializeWebServiceCall(){
Thread webServiceCallThread = new Thread(ExecuteWebService);
webServiceCallThread.Start();
Thread.Sleep(5000); // make the current thread wait 5 seconds
if (webServiceCallThread.IsAlive()){
webServiceCallThread.Abort(); // warning for deprecated/bad practice call!!
}
}
static void ExecuteWebService(){
// the details of this are left to the consumer of the method
int x = WebServiceProxy.CallWebServiceMethodOfInterest();
// do something fascinating with the result
}
調用Thread.Abort的(),因爲.NET 2.0已被棄用,被普遍認爲是不好的編程習慣,主要是由於與非託管代碼的不良相互作用的可能性。與使用代碼相關的風險當然要由您來評估。
如果您使用WCF調用外部Web服務,那麼只需將客戶端端點綁定配置中的sendTimeout值配置爲5秒即可。然後,如果客戶代理對象沒有得到來自外部服務的回覆,則會拋出TImeoutException,您可以處理並繼續。示例綁定配置如下所示:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="myExternalBindingConfig"
openTimeout="00:01:00"
closeTimeout="00:01:00"
sendTimeout="00:05:00"
receiveTimeout="00:01:00">
</binding>
</basicHttpBinding>
</bindings>
</system.serviceModel>
謝謝。不幸的是,這是一個REST風格的Web服務,而不是wcf。 –
您使用什麼來進行Web服務調用WebClient? – softveda