WCF学习之旅—第三个示例之三(二十九)
上接WCF学习之旅—第三个示例之一(二十七)
WCF学习之旅—第三个示例之二(二十八)
在上一篇文章中我们创建了实体对象与接口协定,在这一篇文章中我们来学习如何创建WCF的服务端代码。具体步骤见下面。
六、创建项目BookMgr.Service的WCF服务代码
第一步、安装Entity Framework 6.1.3
1) 安装过程同上一篇文章中类似。使用NuGet下载最新版的Entity Framework 6.1.3。在解决方案资源管理器中——>在项目BookMgr.Service上鼠标右键单击——>弹出一个菜单,选中“管理解决方案的NuGet程序包”,打开NuGet程序包管理界面。如下图。
2) 在NuGet程序包管理界面中搜索 Entity,找到最新版本Entity Framework,点击安装。如下图。
第二步、创建WCF服务代码
1) 在“解决方案资源管理器”中使用鼠标右键,点击“BookMgr.Service”项目,在弹出菜单上,依次选择“添加—》WCF服务”
2) 在“项名称”文本框中,输入 BookService,然后选择“确定”按钮。
3) 删除同步生成的IBookService接口文件。
4) 在“解决方案资源管理器中”中,定位BookService.svc.cs文件,双击在“代码编辑器”中打开,并编写如下代码。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using BookMgr.Contracts;
using BookMgr.Model;
using BookMgr.Common;
using System.Data.Entity; namespace BookMgr.Service
{
// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码、svc 和配置文件中的类名“BookService”。
// 注意: 为了启动 WCF 测试客户端以测试此服务,请在解决方案资源管理器中选择 BookService.svc
// 或 BookService.svc.cs,然后开始调试。
public class BookService :IBookService
{ BookEntities db = new BookEntities();
public string Add(string mbook)
{
try
{
Books book = XMLHelper.DeSerializer<Books>(mbook); db.Books.Add(book);
db.SaveChanges(); } catch (Exception ex)
{
return ex.Message; }
return "true";
}
public string Delete(string bookInfo)
{
try
{
Books book = XMLHelper.DeSerializer<Books>(bookInfo); db.Entry(book).State = EntityState.Deleted;
db.SaveChanges();
} catch (Exception ex)
{ return ex.Message;
} return "true";
} public void DoWork()
{
} public string Edit(string mbook)
{ try
{
Books book = XMLHelper.DeSerializer<Books>(mbook); db.Entry(book).State = EntityState.Modified;
db.SaveChanges(); }
catch (Exception ex)
{
//这里如果出现异常,则返回一个自定义的错误信息,用于进行调试,可以看到更详细的异常信息,方便定位问题。
string reason = GetErrorMessage(ex);
SQLError error = new SQLError("更新数据库操作", reason);
throw new FaultException<SQLError>(error, new FaultReason(reason), new FaultCode("Edit"));
}
return "true";
}
public string Get(string Id)
{
int bookId = Convert.ToInt32(Id);
Books book = db.Books.Find(bookId);
string xml = XMLHelper.ToXML<Books>(book);
return xml;
//throw new NotImplementedException();
} public string Search(string Category, string searchString)
{
var cateLst = new List<string>();
var cateQry = from d in db.Books
orderby d.Category
select d.Category; cateLst.AddRange(cateQry.Distinct());
var books = from m in db.Books
select m; if (!String.IsNullOrEmpty(searchString))
{ books = books.Where(s => s.Name.Contains(searchString));
} List<Books> list = null;
if (string.IsNullOrEmpty(Category))
{
list = books.ToList<Books>();
//return XMLHelper.ToXML<List<Books>>(list); }
else
{
list = books.Where(x => x.Category == Category).ToList<Books>();
// return XMLHelper.ToXML<IQueryable<Books>>(books.Where(x => x.Category == Category)); }
return XMLHelper.ToXML<List<Books>>(list);
} StringBuilder sb = new StringBuilder(); /// <summary>
/// 递归获取错误信息的内部错误信息,直到InnerException为null
/// </summary>
/// <param name="ex"></param>
private string GetErrorMessage(Exception ex)
{
if (ex.InnerException != null)
{
sb.Append("InnerException:"+ex.Message + ",");
GetErrorMessage(ex.InnerException);
}
else
{
sb.Append(ex.Message + ",");
}
return sb.ToString();
} }
}
5) 在“解决方案资源管理器”中从“BookMgr.Model”项目中的“App.Config”文件复制到“BookMgr.Service”项目中。如下图。
6) 在菜单栏上,依次选择“调试”、“开始执行(不调试)”以运行服务。 此时将打开一个浏览窗口,并显示该服务的 XML 架构。如下图。
7) 关闭浏览器窗口。
WCF学习之旅—第三个示例之三(二十九)的更多相关文章
- WCF学习之旅—第三个示例之二(二十八)
上接WCF学习之旅—第三个示例之一(二十七) 五.在项目BookMgr.Model创建实体类数据 第一步,安装Entity Framework 1) 使用NuGet下载最新版的Entity Fram ...
- WCF学习之旅—第三个示例之四(三十)
上接WCF学习之旅—第三个示例之一(二十七) WCF学习之旅—第三个示例之二(二十八) WCF学习之旅—第三个示例之三(二十九) ...
- WCF学习之旅—第三个示例之五(三十一)
上接WCF学习之旅—第三个示例之一(二十七) WCF学习之旅—第三个示例之二(二十八) WCF学习之旅—第三个示例之三(二十九) WCF学习 ...
- WCF学习之旅—第三个示例之一(二十七)
一.前言 通过前面二十几个章节的学习,我们知道了什么是WCF:WCF中的A.B.C:WCF的传输模式:WCF的寄宿方式:WCF的异常处理.本文综合应用以上知识点,一步一步写一个小的WCF应用程序——书 ...
- WCF学习之旅—基于Fault Contract 的异常处理(十八)
WCF学习之旅—WCF中传统的异常处理(十六) WCF学习之旅—基于ServiceDebug的异常处理(十七) 三.基于Fault Contract 的异常处理 第二个示例是通过定制Servic ...
- SSIS 学习之旅 第一个SSIS 示例(二)
这一章还是继上一章例子 进行一些小的知识扩展.主要是为了让大家更快的上手SSIS. 概要设计: 1.按用户组生成CSV文件到Pending目录下, 2.移动Pending目录下的CSV文件 ...
- WCF学习之旅——第一个WCF示例(三)
第五步:创建客户端 WCF应用服务被成功寄宿后,WCF服务应用便开始了服务调用请求的监听工作.此外,服务寄宿将服务描述通过元数据的形式发布出来,相应的客户端就可以获取这些元数据.接下来我们来创建客户端 ...
- WCF学习之旅——第一个WCF示例(一)
最近需要用到WCF,所以对WCF进行了解.在实践中学习新知识是最快的,接下来先做了一个简单的WCF服用应用示例. 本文的WCF服务应用功能很简单,却涵盖了一个完整WCF应用的基本结构.希望本文能对那些 ...
- WCF学习之旅—WCF第二个示例(五)
二.WCF服务端应用程序 第一步,创建WCF服务应用程序项目 打开Visual Studio 2015,在菜单上点击文件—>新建—>项目—>WCF服务应用程序.在弹出界面的“名称”对 ...
随机推荐
- Virtual Box配置CentOS7网络(图文教程)
之前很多次安装CentOS7虚拟机,每次配置网络在网上找教程,今天总结一下,全图文配置,方便以后查看. Virtual Box可选的网络接入方式包括: NAT 网络地址转换模式(NAT,Network ...
- .net core快速上手
2014年11月12日的Connect ();开发者活动上宣布将.NET堆栈基于MIT协议开源,并且提供开源保证,托管在Github上.当时的版本与最终目标相距甚远,然而有一点可以肯定的是,这是一个与 ...
- ASP.NET Core 1.0 使用 Dapper 操作 MySql(包含事务)
操作 MySql 数据库使用MySql.Data程序包(MySql 开发,其他第三方可能会有些问题). project.json 代码: { "version": "1. ...
- [干货来袭]MSSQL Server on Linux预览版安装教程(先帮大家踩坑)
前言 昨天晚上微软爸爸开了全国开发者大会,会上的内容,我就不多说了,园子里面很多.. 我们唐总裁在今年曾今透漏过SQL Server love Linux,果不其然,这次开发者大会上就推出了MSSQL ...
- 微信开发 :WeixinPayInfoCollection尚未注册Mch 问题解决
在使用开源项目 SENPARC.WEIXIN SDK 调用微信支付接口的时候出现了WeixinPayInfoCollection尚未注册Mch,这个问题. 最后地解决方案是: 我这个傻逼忘了在全局Gl ...
- Hibernate中事务声明
Hibernate中JDBC事务声明,在Hibernate配置文件中加入如下代码,不做声明Hibernate默认就是JDBC事务. 一个JDBC 不能跨越多个数据库. Hibernate中JTA事务声 ...
- Lind.DDD.LindMQ的一些想法
回到目录 很久就想写一套属于自己的消息队列组件,前段时候看了汤雪华同学的EQueue,感觉还是不错的,他也是看了rabbitMQ之后写的Equeue,在设计上与前者有类似的地方,而大叔这次准备写一个L ...
- SNMP简单网络管理协议
声明:以下内容是学习谌玺老师视频整理出来(http://edu.51cto.com/course/course_id-861.html) SNMP(Simple Network Management ...
- 15个C++项目列表
实验楼上有很多C++的实战项目,从简单到进阶,学习每个项目都可以掌握相应的知识点. 如果你还是C++新手的话,那么这个C++的项目列表你可以拿去练手实战开发,毕竟学编程动手实践是少不了的! 如果你不知 ...
- OpenGL shader 中关于顶点坐标值的思考
今天工作中需要做一个事情: 在shader内部做一些空间距离上的计算,而且需要对所有的点进行计算,符合条件的显示,不符合条件的点不显示. 思路很简单,在vertex shader内知道顶点坐标,进行计 ...