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 条评论
登录 后参与评论

相关文章

来自专栏程序员的SOD蜜

VS2008连接CodePlex的源代码管理服务

为了更有效的分享部门的.NET代码,我们决定把一些通用的组件源代码通过CodePlex来托管。CodePlex是MS提供的一个第三方源代码托管服务和开源项目管理...

2276
来自专栏FreeBuf

如何使用Metasploit对安卓手机进行控制

文章内容可能具有一定攻击性,本文仅供技术交流,如有非法使用后果自负。 在这次的实验中,我会使用kali linux和安卓模拟器演示如何使用Metasploit...

24410
来自专栏张戈的专栏

PHP7.0正式版编译安装升级及WordPress问题解决分享

盼望以久的 PHP 7.0 正式版,终于在今天发布了! ? 官方给出的新特性如下: PHP 7.0.0 comes with new version of th...

3777
来自专栏玩转JavaEE

JavaWeb之最简洁的配置实现文件上传

按:最近公众号文章主要是整理一些老文章,主要是个人CSDN上的博客,也会穿插一些新的技术点。 ---- Spring、SpringMVC持续介绍中,基础配置前面...

2493
来自专栏挖坑填坑

(翻译)开始使用ABP.CORE模板 (ASP.NET Core with Angular)

开始一个新使用Angular和 ASP.NET Core 的ABP项目最简单的方法就是通过官方的模板页面来生成模板。切记包含zero模块。在官网完成创建和下载你...

512
来自专栏c#开发者

sql数据库打包部署安装

目的:在客户端服务器上”附加数据库文件”。 一).创建部署项目 1. 打开VS.NET2005。 2.在“文件”菜单上指向“新建项目”。 3. 在“新建项目”对...

3397
来自专栏Porschev[钟慰]的专栏

Windows Server 2008 R2 配置Exchange 2010邮件服务器并使用EWS发送邮件

配置环境 配置环境完全在此前一篇文章搭建好的环境下进行配置: http://www.cnblogs.com/zhongweiv/archive/201...

3028
来自专栏菩提树下的杨过

c#中开发ActiveX的学习笔记

1.为什么要用ActiveX? 网页本身的功能是有限的,要想实现一些网页本身不支持的功能,比如:网页上的p2p视频播放,就得靠ActiveX这种古老的技术。 2...

1905
来自专栏张善友的专栏

iFolder Novell开源文件服务器

     iFolder 是Novell自己开发出的一套软件.将文件存放于iFolder服务器中,而不存放在Windows的工作站. 客户端可以使用下面两种方法...

23110
来自专栏木宛城主

配置SharePoint 2013 Search 拓扑结构

在单台服务器上安装了 SharePoint Server 2013,并且创建了具有默认搜索拓扑的 Search Service 应用程序。在默认搜索拓扑中,所...

1828

扫描关注云+社区