




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
WcfService开发案例向导 Part 1 - 经典推荐!这篇文章简要介绍了Windows communication Foundation (WCF),以及如何在应用程序中调用WCF 服务,非常适合WCF 的初学者。 - CodeP WCF 开发向导经典推荐!http:/forum.EntL 开源ASP.NET 论坛小组奉献。WCF 简介Windows Communication Foundation (WCF) 是.NET Framework 的扩展,用来创建互连的系统。WCF 提供了创建安全的、可靠的、事务服务的统一框架,WCF 整合和扩展了现有分布式系统的开发技术,如Microsoft .Net Remoting、Web Services、Web Services Enhancements (WSE)等等,来开发统一的可靠系统。WCF 框架可以实现SOA架构的松散耦合的应用程序,WCF 简化了构建SOA架构应用的工作,同时通过统一Enterprise Services、Messaging、.Net Remoting、Web Services、WSE 等技术,降低开发复杂度。WCF服务可以通过属性Attribute进行配置,提高灵活性和效率,支持大量的Web Services标准,如XML、XSD、SOAP、Xpath、WSDL等标准和规范,如WS-Addressing、WS-Policy、WS-Security、WS-Trust、WS-Secure、WS-Reliable Messaging、WS-Atomic Transaction、WS-Coordination等等。下图描绘了Windows communication Foundation (WCF) 框架模型:Error! Reference source not found.WCF 通信模型WCF 遵从客户/服务端模型在应用程序间建立通信,客户端程序通过服务端公布的Endpoints端点来直接访问服务。Endpoints 是发送或接收消息的一个地址,每一个服务WCF Service可以有多个Endpoints。Error! Reference source not found.WCF 服务由如下几个主要组件组成,下图表示了这些组件如何进行交互: Service Contract Operation Contract Data Contract Data Member Error! Reference source not found.Service ContractService Contract 定义了会话中的消息方向和类型,用一个接口或类订阅WCF的Service Contract。Service Contract 是外部应用程序访问服务方法的一个通道,在一个服务中至少应该有一个ServiceContract。ServiceContract的定义如下: ServiceContract public interface IWCFForumService OperationContract string GetMessage(int messageID); OperationContract IEnumerable GetMessageInfo(int messageID); http:/forum.EntL 开源ASP.NET论坛小组备注:这里的示例代码采用开源论坛EntLib_BBS数据库,你可以很方便地改用其他数据库。上述接口的ServiceContract attribute 表明这是一个Service Contract,同时Service Contract定义了服务中可用的方法,WCF 服务中的方法与Web services 中的方法比较类似。IWCFForumService 是Forum 的Service接口,公布了服务中所有的OperationContract 方法给外部系统。Operation ContractOperation Contract 定义了WCF 服务中提供给外部系统访问的方法。OperationContract attribute 需要应用到这些方法上,就像Web services 中的Web method 一样。Operation Contract 的示例代码参考IWCFForumService 接口定义。Data ContractData Contract 定义了一系列DataMember,作为一个组合类型(Composite type)在ServiceContract 中使用。通过应用DataContract attribute给一个类来定义Data Contract,Data Contract需要通过serializer 进行序列化。通过应用DataMember attribute 到成员变量上,DataMember 成员变量需要序列化。MessageInfo Data Contract 的定义如下: DataContract public class MessageInfo private int _messageID; private DateTime _postedDate; private string _message; DataMember public int MessageID get return _messageID; set _messageID = value; DataMember public DateTime PostedDate get return _postedDate; set _postedDate = value; DataMember public string Message get return _message; set _message = value; Data MemberDataMember attribute 可以应用到私有成员变量(Private member)上,需要序列化和反序列化,可以访问存取。DataMember的用法参考上面MessageInfo 的定义。使用Visual Studio 2008创建WCF应用程序这里简要说明操作步骤: New Project 类型 选择WCF Service Application,默认的项目中包含有IService1.cs, Service1.svc , Service1.svc.cs, web.config 等文件。其中IServices1 接口有ServiceContract attribute,并且其中的方法也定义了OperationContract attribute。Service1 是IService1 接口的具体实现,Endpoints 和其他行为属性在web.config 配置文件的system.serviceModel 节点定义。如果你改变services 的名称,你需要同时更改 web.config 配置文件中的相关配置,否则外部系统不能识别服务。定制默认的WCF服务现在我们根据实际示例项目的需求,更改默认的WCF 服务。第一步是对现有的服务文件进行改名,或删除现有的文件,然后增加新的文件。在本示例程序中,我们采用第一种方法,对现有的文件进行改名。对IService1.cs 改名为IWCFForumService.cs,Service1.svc 改名为 WCFForumService.svc。代码文件Service1.svc.cs 会自动更名为 WCFForumService.svc.cs。下一步,需要更改web.config 的相关配置。 同时,对IWCFForumService.cs 代码进行修改,代码如下。另外,增加DataContact 类 MessageInfo.cs,其中的成员变量通过DataMemeber 进行标识,MessageInfo 将作为DataContract 在 IWCFForumService 中使用。MessageInfo 是一个独立的类,标识为public,允许外部系统访问。WCFForumService 则是对 IWCFForumService接口的实现类,代码如下: private string strConn = ConfigurationManager.ConnectionStringsEntLibForum.ConnectionString; public string GetMessage(int messageID) string msg = string.Empty; string strSelect = Select Message From yaf_message where MessageID= + messageID.ToString(); using (SqlConnection connection = new SqlConnection(strConn) SqlCommand command = new SqlCommand(strSelect, connection); connection.Open(); SqlDataReader reader = command.ExecuteReader(); try if (reader.Read() msg = readerMessage.ToString().Trim(); finally / Always call Close when done reading. reader.Close(); return msg; public MessageInfo GetMessageInfo(int messageID) MessageInfo messageInfo = null; string strSelect = Select * From yaf_message where MessageID= + messageID.ToString(); using (SqlConnection connection = new SqlConnection(strConn) SqlCommand command = new SqlCommand(strSelect, connection); connection.Open(); SqlDataReader reader = command.ExecuteReader(); try if (reader.Read() messageInfo = new MessageInfo(); messageInfo.MessageID = messageID; messageInfo.Message = readerMessage.ToString().Trim(); messageInfo.PostedDate = Convert.ToDateTime(readerPosted); finally / Always call Close when done reading. reader.Close(); return messageInfo; 承载和测试WCF服务WCF 服务可以部署在IIS 6.0、Windows Activation Service (WAS) with vista 和 IIS 7.0。本示例中,我们采用IIS 6.0部署WCF 服务。编译、运行WCF 示例程序,从IE浏览器显示的文件列表,选择WCFForumService.svc 文件。如果没有客户端程序,你不能直接测试WCF 服务,就像web service 一样。Microsoft 提供了一个简单的方法来测试WCF 服务 WcfTestClient 工具(关于该工具的具体介绍,请参考文章:/Default.aspx?g=posts&t=233 )。如果WCF 服务承载在WCF Service Host (WcfSvcHost.exe) ,WcfTestClient 工具将自动打开并运行。你也可以通过命令行来运行WcfTestClient 工具,脚本如下:C : WcfTestClient http:/localhost:4691/WCFForumService.svchttp:/localhost:4691/WCFForumService.svc 是等待测试的WCF 服务地址。WcfTestClient 在左侧面板显示暴露的方法,同时在右上侧面板也可以输入参数。当输入参数后,点击Invoke 按钮,将调用指定的WCF 方法,在右下侧面板显示结果。调用 WCF服务WCF 服务可以由客户端的应用程序来调用,因此调用WCF 服务的第一步是创建WCF 客户端程序和相关的配置文件。 Service Model Metadata 工具(Svcutil.exe)是一个命令行工具,可以用来创建WCF 客户端。另外,也可以通过增加Service 引用来创建WCF 客户端,本示例程序采用这种方法。创建WCF客户端在 Visual Studio 2008 Windows Form Application 项目中,增加Service 引用。在弹出的Add Service Reference 窗口,输入相应的WCF Service 的地址。示例窗口如下:点击 OK 按钮后,项目文件如下,增加了WCFForumServiceReference 的引用: 使用 WCF Client创建 WCF Client 实例与WCF 服务进行交互。如下代码创建了 WCF Client Proxy 实例对象:WCFForumServiceClient wcfForumServiceClient = new WCFForumServiceClient(WSHttpBinding_IWCFForumService);WCFForumServiceClient 是增加WCF 服务引用时,自动生成的WCF Client 类。WSHttpBinding 是端点绑定方法,在web.config 配置文件中进行指定,IWCFForumService 是WCF 服务接口对象。在创建并实例化 WCF Client Proxy 代理对象后,就可以像访问Web Service 一样,访问WCF 公布的方法了。 调用GetTOP10Messages() 和 GetMessage() 方法的示例代码如下: private void btnRetrieveMessage_Click(object sender, EventArgs e) MessageInfo messageList = new MessageInfo; messageList = wcfForumServiceClient.GetTOP10Messages(); grdTop10.DataSource = messageList; grdTop10.Columns0.DataPropertyName = MessageID; grdTop10.Columns0.HeaderText
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 切片猪肉售卖合同范本
- 外呼员工合同范本
- 混合性酸碱平衡失调护理查房
- 合伙经营机械合同范本
- 安装单包工合同范本
- 船运居间协议合同范本
- 木质设备安装合同范本
- 草皮出售合同范本
- 委托空调维修合同范本
- 焊接铣刀销售合同范本
- epg信息管理制度
- 产品开发项目管理制度
- 液氧站安全管理制度
- 2025至2030年中国汽车空调过滤器行业市场现状分析及前景战略研判报告
- 【课件】《合并同类项》说课课件++2024-2025学年人教版数学七年级上册
- 2021年12月大学英语四级考试真题及答案(第1套)
- 【课件】新高三启动主题班会:启航高三逐梦未来
- 医院殡葬领域管理制度
- 2025年软考网络管理员真题解析及答案
- 学校物业服务应急事件处理预案
- 校园安全培训课件(教师)
评论
0/150
提交评论