<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
前一篇文章讲述了使用EF来构选我们的模型实体,及业务层的实现。见http://blog.csdn.net/greystar/archive/2008/11/26/3377943.aspx
本文主要讲述的是WCF的实现,WCF的理论可真不少,服务契约,操作契约,及相关的行为处理是一大堆。去年买的WCF服务编程可只动了几页就看不下去了。说实话,真是很浪费,还不如在网上看看那些专家级的博客来得实在。WCF的一些理论可以见如下引用:
http://www.cnblogs.com/artech/archive/2007/02/26/656901.html
http://www.cnblogs.com/jillzhang/category/121346.html
都是一个系列的,说的比较透彻,很适合初学者,理论加实际代码的DEMO。
下面我们来新建一个WCF服务库Demo.WCFContract,这个是定义服务的契约的。MS的模板会帮我们自动生成相应的契约定义和实现。这里我们是分开来的。因此删除相应的文件,新建一个类IEmployeeService.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using Demo.EDM;
namespace Demo.WCFContract
{
[ServiceContract()]
public interface IEmployeeService
{
[OperationContract]
Employee Add(Employee emp);
[OperationContract]
void Delete(Employee emp);
[OperationContract]
void Update(Employee emp);
[OperationContract]
List<Employee> GetEmployees() ;
}
}
IEmployeeService接口提供了增删改查的基本服务。可能你会觉得怪怪的为什么是
Employee Add(Employee emp);
这样来定义。这是因为emp对象是客户端传上来的。在服务器端做完保存操作后,emp对象的状态等信息会改变,如果不将此对象传回客户端,则当客户端对此记录再次修改或删除时就会出现问题,无法附加。因此上篇文章定义的Employeemanager类里的新增方法也要做修改了。
EmployeeManager.cs
public Employee Add(Employee emp)
{
context.AddToEmployees(emp);
context.SaveChanges();
return emp;
}
再创建一个WCF服务库,Demo.WCFService .此类库将对上面的服务契约进行真正的实现。从而为客户提供EMPLOYEE的业务处理。但是内部的业务处理是由EmployeeManager实现的,应该我们将添加Demo. Demo.BusinessManagers的引用。其实现相对比较简单:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
using Demo.EDM;
using System.Reflection;
using Demo.BusinessManagers;
using System.Linq.Expressions;
using System.Data.Objects.DataClasses;
namespace Demo.WCFService
{
public class EmployeeService : Demo.WCFContract.IEmployeeService
{
public EmployeeService()
{
}
#region IEmployeeService 成员
public Employee Add(Employee emp)
{
using (EmployeeManager manager = new EmployeeManager())
{
return manager.Add(emp);
}
}
public void Delete(Employee emp)
{
using (EmployeeManager manager = new EmployeeManager())
{
manager.Delete(emp);
}
}
public void Update(Employee emp)
{
using (EmployeeManager manager = new EmployeeManager())
{
manager.Update(emp);
}
}
List<Employee> Demo.WCFContract.IEmployeeService.GetEmployees()
{
using (EmployeeManager manager = new EmployeeManager())
{
return manager.GetEntities();
}
}
#endregion
}
}
下面就要创建托管程序了.建一个Windows程序,Demo.WCFHost.引用相关的项目,
新增一个app.config.这里我们需要做二件事,一个是数据访问连接的设置,还有一个就是WCF服务的配置。
先来看一下数据访问连接字符串的设置。由于使用了EF,因此写法上要使用EF的标准。当然你如果没有删除Demo.EDM下的app.config,你可以把里面的连接字符串复制过来。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
<add name="newwideEntities" connectionString="metadata=res://*/MyEDM.csdl|res://*/MyEDM.ssdl|res://*/MyEDM.msl;provider=System.Data.SqlClient;provider connection string="Data Source=.;Initial Catalog=newwide;Persist Security Info=True;User ID=sa;Password=123;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />
</connectionStrings>
</configuration>
当然你需要做一下修改,因为其资源文件是以资源方式存在的,所以需要把*改成你的类库名。
<connectionStrings>
<add name="newwideEntities" connectionString="metadata=res://Demo.EDM/MyEDM.csdl|res://Demo.EDM/MyEDM.ssdl|res://Demo.EDM/MyEDM.msl;provider=System.Data.SqlClient;provider connection string="Data Source=.;Initial Catalog=newwide;Persist Security Info=True;User ID=sa;Password=123;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />
</connectionStrings>
这样就将数据连接配置好了。下面我们接着配置一下WCF的配置,如果你可以直接在web.config里自己写,也可以使用wcf的配置工具来生成相应的配置。
关于WCF的配置文件http://www.cnblogs.com/chnking/archive/2008/01/23/1049353.html 这里介绍的比较详细的。
那么作为新手,我们就使用相应的配置工具来实现吧。在app.config上右键会看到有个编辑WCF配置的选项,点击就打开了WCF的配置工具。
在右边的服务里点新建服务:
选择你要托管的服务的实现。
点击下一步完成。
点击左侧主机,在右边点新建(基址)
由于我们的服务是需要对外发布的,因此还需要对服务行为进行配置,以便客户能访问到该服务的元数据。
添加完后在双击该要配置的堆栈元素。设置httgeturl及httpgetenabled
此时我们的服务元数据在http://localhost:20001/EmployeeService地址处进行了发布。
再回到服务下的Demo.WCFService.EmployeeService,选中。配置该服务的行为。
WCF的配置到此就结束了。保存一下。
下面就是要写代码,发布我们的服务了。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
ServiceHost host = null;
private void Form1_Load(object sender, EventArgs e)
{
host = new ServiceHost(typeof(Demo.WCFService.EmployeeService));
host.Opened+= delegate{Console.WriteLine("start");};
host.Open();
}
}
运行该项目Demo.WCFHost
打开IE.输入服务元数据发布地址:http://localhost:20001/EmployeeService
如果能正常看到。就表示你成功了。可以为其他人提供EMPLOYEE服务了。
分享到:
相关推荐
在WCF+EF的示例中,MVP模式可能被用来实现用户界面与服务层之间的解耦。 在这个示例程序中,`Employees.sql`文件可能是用于创建数据库的SQL脚本,包含了一些预定义的员工数据或者用于初始化数据库结构的命令。这与...
标题中的"DevExpress+WindowsService+WCF+EF+SQL"是一个集成的开发框架,结合了多个技术,用于构建高效的企业级应用程序。以下是对这些技术及其在框架中作用的详细解释: 1. DevExpress:DevExpress是一个全面的...
在“WPF+WCF+EF框架实例”中,这三个技术的结合为开发人员提供了一个完整的解决方案,用于构建数据驱动的、具有分布式特性的桌面应用程序。WPF负责前端的用户交互,展示数据和接收用户输入;WCF作为中间层,负责处理...
基于Entity Framework Code First, WCF, MVC3 的网上商店demo
【标题】"EF+WCF+WPF(MVVM)" 框架简单示例 这是一个集成Entity Framework(EF)、Windows Communication Foundation(WCF)和Windows Presentation Foundation(WPF)的项目,利用Model-View-ViewModel(MVVM)设计...
总的来说,“WCF+Winfrom Demo”是一个全面展示WCF服务与Winform客户端集成的实例,它涵盖了服务的创建、客户端的调用、依赖注入以及日志记录等多个方面,为开发者提供了学习和实践这些技术的宝贵资源。通过这个演示...
通过以上步骤,我们可以构建一个完整的、基于Silverlight的前端应用,利用MVVM模式提高代码组织,通过WCF实现与后台服务的高效通信,并使用EF简化Oracle数据库的操作。这样的解决方案既保证了用户界面的互动性,又...
标题“WCF+WEB+WPF”和描述“WCF WEB WPF WinFrom承载”涉及了四个关键概念:Windows Communication Foundation (WCF),Web技术,Windows Presentation Foundation (WPF)以及WinForms。这些都是微软.NET框架下的核心...
描述中提到的“一个学习WCF+LINQ+WPF很好的一个范例”,进一步强调了该项目的教育价值,适合那些希望深入理解并实战这四个关键的Microsoft .NET Framework组件的开发者。 **知识点详解** 1. **Windows ...
在“WCF+WinForm的基础小例子”中,我们可以预见到以下几个关键知识点: 1. **创建WCF服务**:首先,你需要创建一个WCF服务项目,定义服务接口和实现。服务接口通常包含一系列操作合同,这些合同定义了服务可以执行...
【WCF开发实战系列】是针对Windows Communication Foundation(WCF)技术的一系列教程,旨在指导开发者逐步学习如何创建和使用WCF服务。WCF是微软提供的一种用于构建分布式应用程序的框架,它允许服务提供商和消费者...
通过这种方式,开发者可以利用ASP.NET构建用户界面,WCF提供远程服务接口,而Entity Framework则负责数据层的抽象和管理,实现三层架构的解耦和模块化设计。 总结来说,ASP.NET、WCF和Entity Framework的组合为.NET...
**WCF(Windows Communication Foundation)**是微软推出的一种面向服务的通信框架,它提供了一种统一的方式来构建分布式应用程序。在本示例中,WCF被用于创建一个聊天室应用程序,利用了**NetTcpBinding**这一高级...
总结起来,"wcf+wpf实现文件上传下载实例"是一个结合了WCF服务和WPF客户端的应用,它展示了如何在分布式环境中安全、高效地处理文件操作。这个实例涵盖了服务端契约定义、客户端调用、文件流处理、UI交互以及安全...
利用通道上下文可以方便地在调用 WCF服务时传递额外数据,使客户端与服务器端的交互更加灵活3、支持动态加载和卸载模块服务,利用这个特点,你可以快速部署并使用你的WCF服务4、支持模块服务被托管和调用时进行令牌...
在IT行业中,构建高效、可扩展的软件系统是至关重要的,而基于EF(Entity Framework)+WCF(Windows Communication Foundation)的通用三层架构是实现这一目标的常见方式。本项目展示了如何利用这两种技术来构建一个...
标题"EF6.0+WCF+CodeFirst+SqlServer 对初学者帮助很大"揭示了本文将深入探讨四个关键的IT技术:Entity Framework 6.0(简称EF),Windows Communication Foundation(WCF),CodeFirst开发模式以及Microsoft SQL ...
在IT行业中,构建高效、可扩展的软件系统是至关重要的,而"基于EF+WCF的通用三层架构源码及解析"则提供了一种实用的方法来实现这一目标。本项目利用Entity Framework(EF)4.3作为数据访问层,Windows Communication...
在标题提及的“WCF+mvc程序”中,我们可以推断这是一个使用ASP.NET MVC架构开发的小型应用程序,该程序集成了WCF服务以实现特定功能。开发者可能通过在MVC控制器中调用WCF服务,获取或更新数据,然后将这些数据传递...
ExtJs+WCF+LINQ实现分页Grid