WCF学习笔记(四)数据契约、版本控制、错误
来源:互联网 发布:永州金域名都二手房 编辑:程序博客网 时间:2024/05/02 04:36
小结1.
/*
DataContract:但凡自定义数据类型,都要使用此标记标示该类型,用于序列化。
WCF:C/S间传递数据的过程:C端将传入参数序列化后包含在消息中,S端收到消息
* 使用反射反序列化参数,转换成本地CLR类型,执行相关操作,序列化传出参数,C
* 端收到消息后反序列化该参数,再次转换成本地类型。
*/
[DataContract]
public class Class_School
{
//这是序列化事件。当WCF开始序列化类型时会自动调用此方法.
//注意此方法需要和序列化事件名称相同
}
//注意:这里的继承类也要有DataContract标记
[DataContract]
public class Class_SchoolEx : Class_School
{
//这是序列化事件。当WCF开始序列化类型时会自动调用此方法.
//注意此方法需要和序列化事件名称相同
[OnSerializing]
void OnSerializing(StreamingContext context)
{ }
//SqlConnection s = new SqlConnection();
//DataSet
}
//[Serializable]标记会将所有可读写字段序列化
[Serializable]
public struct Struct_School
{
/*结构也有公私成员
*
*默认情况下,以下成员都不会被序列化;必须显式加上datamember标记
*datamember通常使用在属性上,此时,这里的共有成员若是没有使用get
*set访问器,就会报InvalidDatacontractException异常.
*如果类上使用了DataContract标记,则其所有的成员都被默认使用datamember
*若是类上没有使用DataContract标记,.NET会去做契约推断。此方式不推荐。
*
*/
[DataMember]
public string s_SchoolNum { get; set; }
public string s_SchoolName { get; set; }
[DataMember]
public Class_School c_School;
}
小结2.版本控制
[DataContract(Name="School",Namespace="http://schemas.yoyo.zhu")]
public class School
{
//IsRequired:的意思是该字段是否需要赋值后才能序列化
//Order:的意思是这些字段在SOAP包中得顺序,具体作用体现在等效数据契约上
/// <summary>
/// 学校编号
/// </summary>
[DataMember(Name = "Num", IsRequired = true, Order = 0)]
public string s_Num { get; set; }
/// <summary>
/// 学校名称
/// </summary>
[DataMember(Name = "Name", IsRequired = true, Order = 1)]
public string s_Name { get; set; }
/// <summary>
/// 学校地址
/// </summary>
[DataMember(Name = "Address", IsRequired = true, Order = 2)]
public string s_Address { get; set; }
/// <summary>
/// 建校时间
/// </summary>
[DataMember(Name = "DateTime", IsRequired = false, Order = 4)]
public DateTime s_DateTime { get; set; }
/// <summary>
/// 备注
///
/// 版本控制:
/// 若是此字段IsRequired为true的情况下,客户端没有给此字段赋值,则报一下错误:
/// 格式化程序尝试对消息反序列化时引发异常: 尝试对参数 http://www.yoyozhu
/// 进行反序列化时出错: obj。InnerException 消息是“在行 1、位置 296 出现错误。
/// “EndElement”命名空间“http://www.yoyozhu”中的“obj”并非所需元素。所需
/// 元素应为“Description”。”。有关详细信息,请参阅 InnerException。若IsRequired
/// 为false,则客户端不会报错。同时,该字段会被赋予系统默认值
///
/// </summary>
[DataMember(Name = "Description", IsRequired = false, Order = 3)]
public string s_Description { get; set; }
}
小结3.服务错误
public int Divide(int arg1, int arg2)
{
//if (arg2 == 0)
//{
/*
* WCF中的异常应该是平台无关性的,这样的异常的表现形式就是SOAP错误
* FaultException就是SOAP错误;此时服务端的错误和客户端的错误信息一致
*
* 若是不使用faultexcepton,客户端将报一下错误:
* 由于内部错误,服务器无法处理该请求。有关该错误的详细信息,请打开服务器上的
* IncludeExceptionDetailInFaults (从 ServiceBehaviorAttribute 或从
* <serviceDebug> 配置行为)以便将异常信息发送回客户端,或在打开每个 Microsoft .
* NET Framework 3.0 SDK 文档的跟踪的同时检查服务器跟踪日志
*
* 客户端调用服务出现异常,客户端代码在出错的地方就反复调用服务端的该方法,不能跳过
*/
// DivideByZeroException exception = new DivideByZeroException();
// //throw new FaultException<DivideByZeroException>(exception,"arg2 = 0");
// throw new DivideByZeroException();
//}
//else
//{
// return arg1 / arg2;
//}
return arg1 / arg2;
}
- WCF学习笔记(四)数据契约、版本控制、错误
- WCF学习笔记(三),数据契约
- WCF编码规范(四)数据契约
- WCF编码规范(四):数据契约
- [原创] WCF技术剖析之十六:数据契约的等效性和版本控制
- WCF技术剖析之十六:数据契约的等效性和版本控制
- [WCF 学习笔记] 2. 服务契约
- [WCF 学习笔记] 2. 服务契约
- WCF学习笔记(二),服务契约
- WCF学习笔记——契约(Contract)
- WCF学习笔记——契约(Contract)
- (四)、WCF契约编程
- WCF把书读薄(3)——数据契约、消息契约与错误契约
- 【学习】构建WCF面向服务的应用程序系列课程笔记:(3)契约版本处理
- wcf数据契约
- WCF 数据契约
- WCF学习笔记(二)使用Name等属性和数据契约
- WCF契约设计: 服务契约,数据契约和消息契约
- Gtkmm 主窗口与其对话框之间的切换
- vimrc_example.vim
- ftp修改主目录
- uva 156 Ananagrams
- ZODB - a native object database for Python
- WCF学习笔记(四)数据契约、版本控制、错误
- ZODB入门 -- 如何通过面向对象的动态语言 Python 使用对象数据库
- ExtJS应用架构设计(三)
- list json
- Windows 7 中如何删除隐藏设备
- 在Eclipse中创建WEB工程
- 模板库-最大堆的实现
- 如何自动拨打复杂的电话号码
- 使用C#的HttpWebRequest模拟登陆访问人人网(很好的一个例子,理解http的基本工作方式)