2012-09-01 62 views

回答

0

讓我通過提供前面提供的「標準免責聲明」來說明我的答案,即我要在此提供的練習的一部分被認爲是不好的,因爲可能涉及非託管代碼的問題。隨着中說,這裏是一個答案:

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已被棄用,被普遍認爲是不好的編程習慣,主要是由於與非託管代碼的不良相互作用的可能性。與使用代碼相關的風險當然要由您來評估。

1

如果您使用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> 
+0

謝謝。不幸的是,這是一個REST風格的Web服務,而不是wcf。 –

+0

您使用什麼來進行Web服務調用WebClient? – softveda