WCF学习之旅—WCF第二个示例(六)
2023-02-18 16:48:51 时间
WCF学习之旅目录
第五步,创建数据服务
- 在“解决方案资源管理器”中,使用鼠标左键选中“SCF.WcfService”项目,然后在菜单栏上,依次选择“项目”、“添加新项”。
- 在“添加新项”对话框中,选择“Web”节点,然后选择“WCF 服务”项。
- 在“名称”文本框中,输入 BookService,然后选择“添加”按钮。如下图。
4.Visual Studio 2015会同时添加一个IBookService接口文件。这个接口代码文件中的代码如下:
[ServiceContract]
public interface IBookService
{
[OperationContract]
string GetBook(string Id);
[OperationContract]
string AddBook(string book);
[OperationContract]
string EditBook(string book);
[OperationContract]
string Search(string Category, string searchString);
}
5. 在“解决方案资源管理器中”中,定位BookService.svc.cs文件,双击在“代码编辑器”中打开,并编写如下代码。
public class BookService : IBookService
{
Entities db = new Entities();
public string AddBook(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 EditBook(string mbook)
{
try
{
Books book = XMLHelper.DeSerializer<Books>(mbook);
db.Entry(book).State = EntityState.Modified;
db.SaveChanges();
}
catch (Exception ex)
{
return ex.Message;
}
return "true";
}
public string GetBook(string Id)
{
int bookId = Convert.ToInt32(Id);
Books book= db.Books.Find(bookId);
string xml=XMLHelper.ToXML<Books>(book);
return xml;
}
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>();
}
else
{
list = books.Where(x => x.Category == Category).ToList<Books>();
}
return XMLHelper.ToXML<List<Books>>(list);
}
}
6. 在菜单栏上,依次选择“调试”、“开始执行(不调试)”以运行服务。 此时将打开一个浏览窗口,并显示该服务的 XML 架构。
7. 在地址栏中,在 BookService.svc 的 URL 末尾处输入 Books,然后按 Enter 键。如下图。
8. 关闭浏览器窗口。
第六步,创建宿主程序
- WCF服务需要依存一个运行着的进程(宿主),服务寄宿就是为服务指定一个宿主的过程。
- 在菜单栏上,依次选择“文件-->新建-->项目”,或者如下图在“解决方案资源管理器”中使用鼠标右键,弹出快捷菜单。
- 在“添加新项目”对话框中,展开 “Visual C#”和“Windows”节点,然后选择“控制台应用程序”模板。 在“名称”文本框中,输入 Hosting,然后选择“确定”按钮。 如下图。
- 我们可以通过代码的方式完成所有的服务寄宿工作。在“解决方案资源管理器中”中,定位到Program.cs文件,双击在“代码编辑器”中打开,并编写如下代码。下面的代码通过一个控制台应用对 BookService的寄宿的实现。关于配置方式参见前一文章。
using SCF.WcfService;
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.ServiceModel.Description;
using System.Text;
using System.Threading.Tasks;
namespace Hosting
{
class Program
{
// 无配置文件的启动程序
static void Main(string[] args)
{
using (ServiceHost host = new ServiceHost(typeof(BookService)))
{
host.AddServiceEndpoint(typeof(IBookService), new WSHttpBinding(),
"http://127.0.0.1:8888/BookService");
if (host.Description.Behaviors.Find<ServiceMetadataBehavior>() == null)
{
ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();
behavior.HttpGetEnabled = true;
behavior.HttpGetUrl = new Uri("http://127.0.0.1:8888/BookService/metadata");
host.Description.Behaviors.Add(behavior);
}
host.Opened += delegate
{
Console.WriteLine("BookService,按任意键终止服务!");
};
host.Open();
Console.Read();
}
}
}
在接下来的步骤中,将创建一个 Windows 窗体客户端应用程序以使用该服务。
相关文章
- 使用Karmada实现Helm应用的跨集群部署
- openGauss内核:SQL解析过程分析
- SQL报了一个不常见的错误,让新来的实习生懵了
- Winform开发的界面处理优化
- 数仓的字符截取三胞胎:substrb、substr、substring
- Winform里面的缓存使用
- 带你认识图数据库性能和场景测试利器LDBC SNB
- 分享一个Winform里面的HTML编辑控件Zeta HTML Edit Control,汉化附源码
- 什么是算子?
- 揭秘GES超大规模图计算引擎HyG:图切分
- Volcano成Spark默认batch调度器
- 一文理解OpenStack网络
- openGauss内核:简单查询的执行
- Winform开发框架之权限管理系统改进的经验总结(2)-用户选择界面的设计
- 混沌工程,了解一下
- SAVE: 软件分析验证和测试平台
- 解读2022年度敏捷教练行业现状报告
- 理论+案例,带你掌握Angular依赖注入模式的应用
- 华为云招募工业智能领域合作伙伴,强力扶持+商业变现
- 机器学习实践:基于支持向量机算法对鸢尾花进行分类