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

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

上一次提到,我们的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程序已经运行、然后执行客户端程序,并点击“执行”按钮,检查是否有一个正确的返回值。

相关文章
|
2月前
|
SQL API 定位技术
基于C#使用winform技术的游戏平台的实现【C#课程设计】
本文介绍了基于C#使用WinForms技术开发的游戏平台项目,包括项目结构、运行截图、实现功能、部分代码说明、数据库设计和完整代码资源。项目涵盖了登录注册、个人信息修改、游戏商城列表查看、游戏管理、用户信息管理、数据分析等功能。代码示例包括ListView和ImageList的使用、图片上传、图表插件使用和SQL工具类封装,以及高德地图天气API的调用。
基于C#使用winform技术的游戏平台的实现【C#课程设计】
|
29天前
|
设计模式 程序员 C#
C# 使用 WinForm MDI 模式管理多个子窗体程序的详细步骤
WinForm MDI 模式就像是有超能力一般,让多个子窗体井然有序地排列在一个主窗体之下,既美观又实用。不过,也要小心管理好子窗体们的生命周期哦,否则一不小心就会出现一些意想不到的小bug
|
1月前
|
API C# Windows
【C#】在winform中如何实现嵌入第三方软件窗体
【C#】在winform中如何实现嵌入第三方软件窗体
73 0
|
1月前
|
数据可视化 程序员 C#
C#中windows应用窗体程序的输入输出方法实例
C#中windows应用窗体程序的输入输出方法实例
46 0
|
1月前
|
API C#
C#实现Winform程序右下角弹窗消息提示
C#实现Winform程序右下角弹窗消息提示
84 0
|
3月前
|
关系型数据库 Java MySQL
C#winform中使用SQLite数据库
C#winform中使用SQLite数据库
189 3
C#winform中使用SQLite数据库
|
3月前
|
数据库
C#Winform使用NPOI获取word中的数据
C#Winform使用NPOI获取word中的数据
180 2
|
3月前
|
传感器 开发框架 JSON
聊聊 C# dynamic 类型,并分享一个将 dynamic 类型变量转为其它类型的技巧和实例
聊聊 C# dynamic 类型,并分享一个将 dynamic 类型变量转为其它类型的技巧和实例
160 0
|
4月前
|
文字识别 自然语言处理 C#
印刷文字识别使用问题之C#发票识别的代码实例在哪里可以查看
印刷文字识别产品,通常称为OCR(Optical Character Recognition)技术,是一种将图像中的印刷或手写文字转换为机器编码文本的过程。这项技术广泛应用于多个行业和场景中,显著提升文档处理、信息提取和数据录入的效率。以下是印刷文字识别产品的一些典型使用合集。
|
前端开发
WCF更新服务引用报错的原因之一
WCF更新服务引用报错的原因之一