WCF服务调用中发生的异常及处理技巧

文章最后给出正确捕获异常的捕获顺序。本次异常捕获仅为介绍,部分为应用性功能,所以代码和行文相对简单,还介绍了在服务器端异常处理的一些技巧。

1、首先,我们创建一个简单的计算器服务器和客户端,如下:

点击展开代码

//服务器
[ServiceContract]
public interface ICalc
{
[OperationContract]
[FaultContract(typeof(GreentingError))]
string Div(int x, int y);
}
public class Calc : ServiceBase, ICalc
{
public string Div(int x, int y)
{string result = string.Empty;
try
{result = string.Format("result: {0}", x / y); } catch (DivideByZeroException ex)
{throw ex; }return result; }}
//客户端
[ServiceContract]
public interface ICalc
{
[OperationContract]
[FaultContract(typeof(GreentingError))]
string Div(int x, int y);
}
public class CalcClient : ClientBase<ICalc>, ICalc
{ public string Div(int x, int y) {return base.Channel.Div(x, y); }}

好吧,我承认代码相当的简单,不过我喜欢简洁的东西。

2、简单的东西就是好,调用都简单得多;我们来调用一下。

try
{
CalcClientcalcclient = new CalcClient();
string result =calcclient.Div(10, 0);
Console.WriteLine(result);
Console.ReadKey();
}
catch (TimeoutExceptionex) {throw ex; }
catch (FaultException<GreentingError> ex) {throw ex; }
catch (FaultExceptionex) {throw ex;
catch (System.ServiceModel.CommunicationException ex) {throw ex; }
catch (Exceptionex) {throw ex; }

3、当我们在调用服务的Div(int x,int y)方法并给对数y传递了值为0后,服务器端将会引发DivideByZeroException的异常,这在预料之中。这时候,

在客户端的FaultException部分捕获了这个异常。

4、没问题,我们再在服务器代码中手动抛出FaultException异常。

catch (DivideByZeroException ex)
{FaultException exception = new FaultException(ex.Message); throw exception;}

这时候发现,还是FaultException捕获了这个异常,为何?

时间: 2024-10-27 13:28:03

WCF服务调用中发生的异常及处理技巧的相关文章

WCF服务调用,跨域方式访问服务而又没有正确的跨域策略,

问题描述 SilverlightApplication1ServiceReference1ServiceReference1.Service1Clientpoxy=newServiceReference1.Service1Client();//newBasicHttpBinding(),addresspoxy.ABAsync(12); 解决方案

如何在调用WCF服务之前弹出一个确认对话框?

昨天有人在微博上问我如下一个问题: 老蒋,客户端调用wcf的一个接口函数时,有没有什么办法可以先弹出一个确认框,确认后再执行调用.因为这个接口函数再很多地方都执行了调用,所以我想在某个入口进行统一地弹出一个确认框... 其实这个问题可以通过WCF的扩展来完成,具体来说这个扩展涉及到一个我们不太常用的组件"InteractiveChannelInitializer",在我的<WCF全面解析>中对它有过概括性的介绍.InteractiveChannelInitializer实现

Windows Azure中WCF服务的实现和调试

开启诊断 通过以上的程序应用,现在对于我们来讲,大多数和诊断有关的工作都已经完成了.但做好之后一定要记住,我们必须要把"sharedListener"添加到"AzureLocalStorage"中.完成这个任务其实十分简单,只需要在"WCF Web Role"的"Web.Config"文件中交换一下被注释掉的"system.diagnostics"节点就可以了. 另外,还必须把下面这行代码添加到"

WCF服务已在Windows Azure中得以实现和调试

Windows Communication Foundation (WCF)是一种被广泛使用的客户端/服务端通信技术,由微软提供,现在已经十分纯熟了.它打破了原先一个对话框只能和一个进行交互,WCF服务可以和一个WCF客户端进行通信,同时也可以和采用了同样的标准的其他框架的客户端进行通信.这是十分难得的.为了把在Windows Azure中运行的,使用强大的WCF框架的服务暴露出来,Windows Azure也不甘示弱,为平台提供了一个WCF角色.不管在哪个框架和平台上构建复杂的,具有高度可扩展

VS做的ASP.NET网站想记录获取到项目中的所有网页发生的异常

问题描述 问题一:VS做的ASP.NET网站,现在想获取到项目中的所有网页(已发布)在用户使用过程中发生的异常,如何获取并实时查看呢?用日志吗?问题二:如何将网站用户提交的信息通过第三方邮箱发到程序员指定的邮箱呢?各位大牛,求助啦~~ 解决方案 本帖最后由 u014188090 于 2015-01-22 15:26:57 编辑解决方案二:IIS有日志可以看到程序异常,也可以通过rty{}catch{}来捕获异常并记录解决方案三:用户提交信息之后,你就可以借助qq或者163的邮件服务器,转发到你的

T-SQL编程中的异常处理-异常捕获(try catch)与抛出异常(throw)

原文:T-SQL编程中的异常处理-异常捕获(try catch)与抛出异常(throw)   本文出处: http://www.cnblogs.com/wy123/p/6743515.html     T-SQL编程与应用程序一样,都有异常处理机制,比如异常的捕获与异常的抛出(try catch throw),本文简单介绍异常捕获与异常抛出在T-SQL编程中的实际使用 . 异常处理简单说明 异常捕获在应用程序编程中非常常见,提供了处理程序运行时出现的任何意外或异常情况的方法刚毕业的时候对于异常处

WCF服务全局统一异常处理机制

转载:http://www.csframework.com/archive/1/arc-1-20150109-2193.htm 服务端增加WCF服务全局异常处理机制,任一WCF服务或接口方式出现异常,将统一调用WCF_ExceptionHandler.ProvideFault方法,因此不需要每个方法使用try catch写法. C# Code: /// <summary> /// WCF服务端异常处理器 /// </summary> public class WCF_Excepti

WCF技术剖析之五:利用ASP.NET兼容模式创建支持会话(Session)的WCF服务

在<基于IIS的WCF服务寄宿(Hosting)实现揭秘>中,我们谈到在采用基于IIS(或者说基于ASP.NET)的WCF服务寄宿中,具有两种截然不同的运行模式:ASP.NET并行(Side by Side)模式和ASP.NET兼容模式.对于前者,WCF通过HttpModule实现了服务的寄宿,而对于后者,WCF的服务寄宿通过一个HttpHandler实现.只有在ASP.NET兼容模式下,我们熟悉的一些ASP.NET机制才能被我们使用,比如通过HttpContext的请求下下文:基于文件或者U

vs2012-WCF服务调用 SVCUtil.exe的使用问题

问题描述 WCF服务调用 SVCUtil.exe的使用问题 目前做一个项目,已经写好了一个WCF服务,并且已经成功发布到IIS上,现在想用一个C#窗体程序去调用,但是在用SvcUtil.exe生成客户端文件和配置文件时会有下图的情况只生成.cs文件,但是config文件没有生成,麻烦大神帮忙这是为什么?怎么解决?另外我的系统是win7,VS2012 解决方案 没看到你的指令,你是下面这种格式的吗? SvcUtil.exe /out:clientCode.cs /config:app.config