2009-10-29 64 views
0

我發現的是,如果從新的工作線程拋出FaultException,它不會滲透到客戶端,而只是崩潰WCF。從工作者線程崩潰中拋出FaultException <T> WCF

任何解決方案???

例如:

 
var thread = new Thread(new ThreadStart(
       delegate 
       { 
        new Killbot().KillAllHumans(); // Throws a FaultException 
       })); 
+0

這個問題實際上沒有解決方案,WCF只會從主線程冒出faultExceptions – mglmnc 2009-11-02 06:05:36

回答

0

最簡單的方法是將包裝在一個try-catch塊中的通話和日誌例外:如果你想處理異常在主

var thread = new Thread(new ThreadStart(
      delegate 
      { 
       try 
       { 
        new Killbot().KillAllHumans(); // Throws a FaultException 
       } 
       catch (Exception ex) 
       { 
        System.Diagnostics.Trace.WriteLine(ex.ToString()); 
       } 
      })); 

你將不得不使用BeginInvokeEndInvoke結合AsyncCallback

0

我個人不會打擾WCF服務中的後臺線程。無論如何,服務實際上都是「背景工作者」。您需要做的就是確保您在服務內進行的任何阻止呼叫都不會影響其他客戶端。您可以通過改變併發模式做到這一點:

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)] 
class MyServiceClass : IMyServiceContract { 
    public void KillAll() { 
     new Killbot().KillAllHumans(); // Throws a FaultException 
    } 
} 

當設置,WCF將調用多個線程的服務方法沒有嘗試對他們進行同步。只要你記住你的代碼,你可以做所有你想要的阻塞調用。

相關問題