2009-10-29 83 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将调用多个线程的服务方法没有尝试对他们进行同步。只要你记住你的代码,你可以做所有你想要的阻塞调用。

相关问题