- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
WCF 基本异常处理模式[上篇]
由于 WCF 采用.NET 托管语言(C#和 NET)作为其主要的编程语言,注定以了基于 WCF 的编程方式不可能很复杂。同时,WCF 设计的一个目的就是提供基于非业务逻辑的通信实现,为编程人员提供一套简单易用的应用编程接口(API)。WCF 编程模式的简单性同样体现在异常处理上面, 本篇文章的主要目的就是对 WCF 基于异常处理的编程模式做一个简单的介绍。
一、当异常从服务端抛出
对于一个典型的 WCF 服务调用,我个人倾向于将潜在抛出的异常费为两种类型:应用异常
(Application Exception)和基础结构(Infrastructure Exception)。前者为应用级别,主要体现为执行某个服务操作的业务逻辑抛出的异常;而后者则是业务无关的,通过 WCF 本身的基础架构抛出,主要体现在对象的序列化、消息的处理、消息传输和消息的分发等等。在这里我们更多地关注与应用异常。
首先,我们在不做任何异常处理相关操作的情况下,看看如果在服务端执行某个服务操作的过程中抛出异常后,客户端会得到怎样的结果。我们通过实例的形式来演示这中场景。处于简单和易于理解考虑,我们照例沿用计算服务的例子。
我们照例采用典型的四层结构(Contract、Service、Hosting 和 Client),具体的层次在 VS
解决方案的划分如图 1 所示:
图
图 1 异常抛出实例解决方案结构
下面代码片断表示服务契约(ICalculator)和服务类型(CalculatorService)的定义。为了简
洁,在服务契约接口中,我们仅仅定义了唯一一个用于进行两个整数触发预算的方法 Divide。服务
契约和服务类型类型分别定义在项目 Contracts 和 Services 中。
1:
1: using System.ServiceModel;
2: namespace Artech.WcfServices.Contracts
3: {
4: [ServiceContract(Namespace = /)] 5: public interface ICalculator
6: {
7: [OperationContract]
8: int Divide(int x, int y); 9: }
10: }
1: using Artech.WcfServices.Contracts;
2: namespace Artech.WcfServices.Services
3: {
4: public class CalculatorService : ICalculator 5: {
6: public int Divide(int x, int y)
7: {
8: return x / y; 9: }
10: }
11: }
接下来是通过
接下来是通过 Console 应用程序(Hosting 项目)对上面定义的 WCF 服务(CalculatorService)
进行寄宿(Host)的代码和相关配置。
1:
1: using System;
最后在代表客户端的 Console
最后在代表客户端的 Console 应用程序(Client 项目)中对计算服务 CalculatorService 进行
调用。相关的服务调用代码和配置如下所示,为了让服务端在执行 Divide 操作的时候抛出异常,特
意将第二个参数设置为 0,以便服务在进行除法运算的时候抛出 System.DivideByZeroException
异常。
2: using System.ServiceModel;
3: using Artech.WcfServices.Services;
4: namespace Artech.WcfServices.Hosting
5: {
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18: }
public class Program
{
static void Main(string[] args)
{
using (ServiceHost host = new ServiceHost(typeof(CalculatorService)))
{
host.Open();
Console.Read();
}
}
}
1: xml version=1.0 encoding=utf-8 ?
2: configuration
3:
4:
5:
6:
system.serviceModel
services
service name=Artech.WcfServices.Services.CalculatorService
endpoint address=:37
文档评论(0)