`
javababy1
  • 浏览: 1220449 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

WCF+EF 实战系列三 WCF服务的实现与托管

阅读更多

<?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=&quot;Data Source=.;Initial Catalog=newwide;Persist Security Info=True;User ID=sa;Password=123;MultipleActiveResultSets=True&quot;" 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=&quot;Data Source=.;Initial Catalog=newwide;Persist Security Info=True;User ID=sa;Password=123;MultipleActiveResultSets=True&quot;" 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的配置工具。

在右边的服务里点新建服务:

选择你要托管的服务的实现。

点击下一步完成。

点击左侧主机,在右边点新建(基址)

由于我们的服务是需要对外发布的,因此还需要对服务行为进行配置,以便客户能访问到该服务的元数据。

添加完后在双击该要配置的堆栈元素。设置httgeturlhttpgetenabled

此时我们的服务元数据在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实战示例程序

    在WCF+EF的示例中,MVP模式可能被用来实现用户界面与服务层之间的解耦。 在这个示例程序中,`Employees.sql`文件可能是用于创建数据库的SQL脚本,包含了一些预定义的员工数据或者用于初始化数据库结构的命令。这与...

    DevExpress+WindowsService+WCF+EF+SQL

    标题中的"DevExpress+WindowsService+WCF+EF+SQL"是一个集成的开发框架,结合了多个技术,用于构建高效的企业级应用程序。以下是对这些技术及其在框架中作用的详细解释: 1. DevExpress:DevExpress是一个全面的...

    WPF+WCF+EF框架实例

    在“WPF+WCF+EF框架实例”中,这三个技术的结合为开发人员提供了一个完整的解决方案,用于构建数据驱动的、具有分布式特性的桌面应用程序。WPF负责前端的用户交互,展示数据和接收用户输入;WCF作为中间层,负责处理...

    EF + WCF + MVC3 OnlineShop 源码

    基于Entity Framework Code First, WCF, MVC3 的网上商店demo

    EF+WCF+WPF(MVVM)

    【标题】"EF+WCF+WPF(MVVM)" 框架简单示例 这是一个集成Entity Framework(EF)、Windows Communication Foundation(WCF)和Windows Presentation Foundation(WPF)的项目,利用Model-View-ViewModel(MVVM)设计...

    WCF+Winfrom Demo

    总的来说,“WCF+Winfrom Demo”是一个全面展示WCF服务与Winform客户端集成的实例,它涵盖了服务的创建、客户端的调用、依赖注入以及日志记录等多个方面,为开发者提供了学习和实践这些技术的宝贵资源。通过这个演示...

    silverlight+wcf+EF

    通过以上步骤,我们可以构建一个完整的、基于Silverlight的前端应用,利用MVVM模式提高代码组织,通过WCF实现与后台服务的高效通信,并使用EF简化Oracle数据库的操作。这样的解决方案既保证了用户界面的互动性,又...

    WCF+WEB+WPF

    标题“WCF+WEB+WPF”和描述“WCF WEB WPF WinFrom承载”涉及了四个关键概念:Windows Communication Foundation (WCF),Web技术,Windows Presentation Foundation (WPF)以及WinForms。这些都是微软.NET框架下的核心...

    WCF+LINQ+WPF+WWF很好的一个范例

    描述中提到的“一个学习WCF+LINQ+WPF很好的一个范例”,进一步强调了该项目的教育价值,适合那些希望深入理解并实战这四个关键的Microsoft .NET Framework组件的开发者。 **知识点详解** 1. **Windows ...

    WCF+WINFORM的基础小例子

    在“WCF+WinForm的基础小例子”中,我们可以预见到以下几个关键知识点: 1. **创建WCF服务**:首先,你需要创建一个WCF服务项目,定义服务接口和实现。服务接口通常包含一系列操作合同,这些合同定义了服务可以执行...

    WCF开发实战系列

    【WCF开发实战系列】是针对Windows Communication Foundation(WCF)技术的一系列教程,旨在指导开发者逐步学习如何创建和使用WCF服务。WCF是微软提供的一种用于构建分布式应用程序的框架,它允许服务提供商和消费者...

    asp.net+wcf+entity framework

    通过这种方式,开发者可以利用ASP.NET构建用户界面,WCF提供远程服务接口,而Entity Framework则负责数据层的抽象和管理,实现三层架构的解耦和模块化设计。 总结来说,ASP.NET、WCF和Entity Framework的组合为.NET...

    WCF + NetTcpBinding 聊天室应用程序

    **WCF(Windows Communication Foundation)**是微软推出的一种面向服务的通信框架,它提供了一种统一的方式来构建分布式应用程序。在本示例中,WCF被用于创建一个聊天室应用程序,利用了**NetTcpBinding**这一高级...

    wcf+wpf实现文件上传下载实例

    总结起来,"wcf+wpf实现文件上传下载实例"是一个结合了WCF服务和WPF客户端的应用,它展示了如何在分布式环境中安全、高效地处理文件操作。这个实例涵盖了服务端契约定义、客户端调用、文件流处理、UI交互以及安全...

    WCF模块服务框架+WCF模块服务托管程序MSH

    利用通道上下文可以方便地在调用 WCF服务时传递额外数据,使客户端与服务器端的交互更加灵活3、支持动态加载和卸载模块服务,利用这个特点,你可以快速部署并使用你的WCF服务4、支持模块服务被托管和调用时进行令牌...

    分享基于EF+WCF的通用三层架构及解析

    在IT行业中,构建高效、可扩展的软件系统是至关重要的,而基于EF(Entity Framework)+WCF(Windows Communication Foundation)的通用三层架构是实现这一目标的常见方式。本项目展示了如何利用这两种技术来构建一个...

    EF6.0+WCF+CodeFirst+SqlServer 对初学者帮助很大

    标题"EF6.0+WCF+CodeFirst+SqlServer 对初学者帮助很大"揭示了本文将深入探讨四个关键的IT技术:Entity Framework 6.0(简称EF),Windows Communication Foundation(WCF),CodeFirst开发模式以及Microsoft SQL ...

    基于EF+WCF的通用三层架构源码及解析

    在IT行业中,构建高效、可扩展的软件系统是至关重要的,而"基于EF+WCF的通用三层架构源码及解析"则提供了一种实用的方法来实现这一目标。本项目利用Entity Framework(EF)4.3作为数据访问层,Windows Communication...

    wcf+mvc程序

    在标题提及的“WCF+mvc程序”中,我们可以推断这是一个使用ASP.NET MVC架构开发的小型应用程序,该程序集成了WCF服务以实现特定功能。开发者可能通过在MVC控制器中调用WCF服务,获取或更新数据,然后将这些数据传递...

    ExtJs+WCF+LINQ实现分页Grid

    ExtJs+WCF+LINQ实现分页Grid

Global site tag (gtag.js) - Google Analytics