2009-06-05 44 views
0

做CommunicationExceptions和/或TimeoutExceptions需要在服务实现中处理? (除了客户?)。客户超时会发生什么?服务是否继续处理消息,还是抛出异常?是否需要在WCF的服务器端处理CommunicationExceptions?

感谢

-Vic

例如做什么,我需要做下面的?

public MyServiceImpl:IMyService 
{ 

void DoSomething() 
    { 
    try{ 
    //Do something 
    } 
    catch (Communication exception){} 
    catch (Timeout exception){} 
    } 
} 
} 

回答

1

既然你在回调情形不是,你的服务方法,甚至不会,如果有一个超时(因为它会通过得到消息的方法不前的各种调度员逮住)调用。所以不需要在这里捕捉这些例外。

如果您使用Stream作为您的操作参数之一,则事情会有所不同,因为如果您的客户端引发了一系列棘手的问题,您可能在阅读流时遇到异常。但在那种情况下,无论如何你都必须防范例外。

0

按通常:这取决于:-)

如果每个呼叫实例化,或单向消息,那么,即使是坏事(异常)发生在服务器上,他们将传播给客户端(或单向场景:刚刚丢弃),而且您不必为此担心。

但是:如果你有一个会话场景,其中无论是你的传输协议(TCP/IP在netTtcp结合的情况下)使用传输会话,或者你如wsHttpBinding与服务器建立一个应用程序会话,那么你需要在服务器上绝对确保捕获所有异常并处理它们,并仅以SOAP错误的形式返回它们。

如果你不这样做,那么渠道(客户端的代理实例和服务器实例之间的通信管道)将“断陷”,如不可用,客户端代理实例将需要重新创建。

而且,记住,.NET异常是 - 一个.NET具体的事情。如果您的服务需要互操作并且可以从例如Java,Ruby,PHP或其他客户端,您绝对必须捕获服务器端的所有.NET异常,并将它们转换为SOAP错误(这是可互操作的等价物)。你可以通过在你的服务器端实现IErrorHandler接口来实现。

马克

相关问题