C# WCF 完整实例,winform 窗体作为 宿主

上一次提到,我们的WCF程序宿主是发布到IIS上面的。虽然这样做未尝不可,不过不便于我们进行“开始”或“停止”WCF服务的操作。所以再次尝试了编写以窗体应用程序作为WCF服务宿主的方式,并取得了成功。而下文则记录整个程序的建立过程。

一、创建WCF服务

首先创建一个WCF服务项目,项目名称为WCFService,解决方案为WCFDemo。

新建的WCF服务项目已经包含了一个GetData()函数,我们这个例子中直接使用这个函数。

二、创建WCF宿主

同样地,我们为这个解决方案增加一个WCF服务宿主项目。项目名称为WCFServerHost,程序类型为Windows窗体应用程序。

在程序的窗口上放置一个按钮,并将按钮的标题改为“开启服务”,修改后的窗口如下:

然后为程序添加System.ServiceModel和WcfService两个引用

最后,双击程序按钮添加如下代码:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

private ServiceHost Host = null; private void button1_Click(object sender, EventArgs e) {     if (Host == null)     {         Host = new ServiceHost(typeof(WCFService.Service1));           //绑定         System.ServiceModel.Channels.Binding httpBinding = new BasicHttpBinding();         //终结点         Host.AddServiceEndpoint(typeof(WCFService.IService1), httpBinding, "http://localhost:8002/");         if (Host.Description.Behaviors.Find<System.ServiceModel.Description.ServiceMetadataBehavior>() == null)         {             //行为             ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();             behavior.HttpGetEnabled = true;               //元数据地址             behavior.HttpGetUrl = new Uri("http://localhost:8002/Service1");             Host.Description.Behaviors.Add(behavior);                           //启动             Host.Open();         }     } }

然后,在关闭窗口事件中添加如下代码:

1 2 3 4 5 6 7

private void Form1_FormClosed(object sender, FormClosedEventArgs e) {     if (Host != null)     {         Host.Close();     } }

好了,现在运行应用程序,开启服务后,在IE浏览器中输入http://localhost:8002/Service1,检查是否正常显示元数据。

三、编写客户端程序

在解决方案中再添加一个新的Windows窗体应用程序,程序名称为WCFClient。

然后,在关闭窗口事件中添加如下代码:在程序项目上按右键,选择“添加服务引用……”。在添加服务引用对话框的地址栏位中,输入:http://localhost:8002/Service1,发现服务后,将服务命名空间改为ServiceReferenceDemo,然后点击“确定”按钮。

添加完服务后,我们在程序窗口上放置一个按钮,并将按钮标题命名为“执行”。双击“执行”按钮,并编写如下代码:

1 2 3 4 5 6 7 8 9

private void button1_Click(object sender, EventArgs e) {     using (ServiceReferenceDemo.Service1Client sc = new ServiceReferenceDemo.Service1Client())     {         sc.Open();         MessageBox.Show(sc.GetData(10));         sc.Close();     } }

四、测试执行

首先确保Host程序已经运行、然后执行客户端程序,并点击“执行”按钮,检查是否有一个正确的返回值。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏菩提树下的杨过

.net程序员使用Oracle新手上路指南

虽然oracle,sqlserver都是关系型数据库,sql语句大部分也差不多,但是从sqlserver换到oracle还是有很多不适应的地方,本文旨在帮助广大...

1945
来自专栏木宛城主

SharePoint自动化部署,利用PowerShell 导入用户至AD——PART II

这是对上一篇文章《SharePoint自动化部署,利用PowerShell 导出/导入AD中的用户》进行补充。开发时,为了测试和演示,我们往往需要经常性的把用...

1968
来自专栏Play & Scala 技术分享

如何清除Chrome浏览器301缓存?

40511
来自专栏GuZhenYin

ASP.NET Core使用静态文件、目录游览与MIME类型管理

前言 今天我们来了解了解ASP.NET Core中的静态文件的处理方式. 以前我们寄宿在IIS中的时候,很多静态文件的过滤 和相关的安全措施 都已经帮我们处理好...

28410
来自专栏一个爱瞎折腾的程序猿

vue项目实践-前后端分离关于权限的思路

最近看到许多关于权限的思路,但好像都是使用动态加载路由的方式,现在也分享下我在项目中使用的解决方案。 前后端分离关于权限的处理每个人都不一样,根据项目选择制定...

851
来自专栏移动开发

RxJava使用总结

1.RxJava在android中想要使用AndroidSchedulers.mainThread()这个线程,需要在你的gradle文件添加下面这个依赖

922
来自专栏JadePeng的技术博客

开源小工具 - swagger API访问代码生成器(js/typescript)

现在流行前后端分离,后端通常会使用swagger生成api文档,提供给前端的同事来调用,一般前端是查看这个文档,根据文档说明编写调用代码。其实,swagger已...

3116
来自专栏大内老A

[WCF权限控制]ASP.NET Roles授权[上篇]

在采用Windows认证的情况下,使用基于Windows用户组安全主体权限模式是一个不错的选择。我们可以直接使用现有的用户组设置,也可以为相应的应用或服务创建单...

1876
来自专栏草根专栏

使用Identity Server 4建立Authorization Server (2)

第一部分主要是建立了一个简单的Identity Server. 接下来继续: 建立Web Api项目 如图可以在同一个解决方案下建立一个web api项目: ?...

3814
来自专栏游戏杂谈

ActionScript3检测当前下载资源的速度

speed = (byteTotal/1024)/(endTime-startTime),这个应该算是平均速度

572

扫码关注云+社区