博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# WCF 完整实例,winform 窗体作为 宿主
阅读量:7042 次
发布时间:2019-06-28

本文共 1910 字,大约阅读时间需要 6 分钟。

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

转载地址:http://hhqal.baihongyu.com/

你可能感兴趣的文章
甲骨文解散Java Mission Control团队事件新进展
查看>>
书评:实战Apache JMeter
查看>>
2014年基于Raspberry Pi的5大项目
查看>>
[deviceone开发]-openPage的动画效果示例
查看>>
EAGLEPCB7.7 gerber文件导出
查看>>
苏宁11.11:苏宁易购移动端的架构优化实践
查看>>
GitHub推出Scientist,帮助开发者重构关键路径代码
查看>>
力荐!这些工具可以帮你写出干净的代码
查看>>
优化typecho性能,使typecho可以流畅支持200w posts
查看>>
UITableView基础[ 3 ] 使用UIRefreshControl实现下拉刷新功能
查看>>
el-admin v1.7 发布,后台管理系统
查看>>
JFinal 开发的内容管理系统 JFinalCMS 1.0 发布
查看>>
Gitea Extension for Visual Studio V1.0.62 发布
查看>>
PHP7 的抽象语法树(AST)带来的变化
查看>>
如何在Mac 终端升级ruby版本
查看>>
国际编程教育权威科学家菲利普.米勒教授来访 SegmentFault 总部
查看>>
API 标准化成为技术团队面临的最大挑战
查看>>
CSS 小三角
查看>>
Ruby on Rails 曝路径穿越与任意文件读取漏洞
查看>>
分享一个基于 Node.js 的 Web 开发框架 - Nokitjs
查看>>