博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Wcf 基础编程
阅读量:5748 次
发布时间:2019-06-18

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

1.设计服务协定 比较好的方法是接口来定义服务的协定

 

 1 
using System;
 2 
using System.Collections.Generic;
 3 
using System.Linq;
 4 
using System.Runtime.Serialization;
 5 
using System.ServiceModel;
 6 
using System.Text;
 7 
 8 
namespace WcfService2
 9 {
10     [ServiceContract]   
//
服务协定定义
11 
12     
public 
interface IInterface1
13     {
14         [OperationContract]  
//
要公开的服务方法
15 
        
string Function1(
int value);
16 
17     }
18     [ServiceContract]  
//
定义的第二个服务协定 
19 
    
public 
interface IService1
20     {
21 
22         [OperationContract]
23         
string GetData(
int value);
24 
25         [OperationContract]
26         CompositeType GetDataUsingDataContract(CompositeType composite);
27 
28         
//
 TODO: Add your service operations here
29 
    }
30 
31 
32     [DataContract]   
//
数据协定 定义
33 
    
public 
class CompositeType
34     {
35         
bool boolValue = 
true;
36         
string stringValue = 
"
Hello 
";
37 
38         [DataMember]
39         
public 
bool BoolValue
40         {
41             
get { 
return boolValue; }
42             
set { boolValue = value; }
43         }
44 
45         [DataMember]
46         
public 
string StringValue
47         {
48             
get { 
return stringValue; }
49             
set { stringValue = value; }
50         }
51     }
52 }

2.实现服务协定  也就是用类实现已定义好的接口

 

 1 
using System;
 2 
using System.Collections.Generic;
 3 
using System.Linq;
 4 
using System.Runtime.Serialization;
 5 
using System.ServiceModel;
 6 
using System.Text;
 7 
 8 
namespace WcfService2
 9 {
10     
public 
class Service1 : IService1,IInterface1
11     {
12         
public 
string GetData(
int value)
13         {
14             
return 
string.Format(
"
You entered: {0}
", value);
15         }
16 
17         
public CompositeType GetDataUsingDataContract(CompositeType composite)
18         {
19             
if (composite.BoolValue)
20             {
21                 composite.StringValue += 
"
Suffix
";
22             }
23             
return composite;
24         }
25 
26         
public 
string Function1(
int a)
27         {
28             
return 
"
hello world!
";
29         }
30     }
31 }

3.承载服务的实现 实现服务的宿主

a.用windowform 实现的宿主

 

 1 
using System;
 2 
using System.Collections.Generic;
 3 
using System.ComponentModel;
 4 
using System.Data;
 5 
using System.Drawing;
 6 
using System.Linq;
 7 
using System.Text;
 8 
using System.Windows.Forms;
 9 
using WcfService2;
10 
using System.ServiceModel;
11 
using System.ServiceModel.Description;
12 
13 
namespace Host001
14 {
15     
public 
partial 
class Form1 : Form
16     {
17         ServiceHost sHost = 
null;
18 
19         
public Form1()
20         {
21             InitializeComponent();
22         }
23 
24         
private 
void button1_Click(
object sender, EventArgs e)
25         {
26             Uri uri = 
new Uri(
"
http://localhost:8000
");   
//
服务的地址
27 
28             sHost = 
new ServiceHost(
typeof(Service1), uri);   
//
创建服务宿主
29 
30             sHost.AddServiceEndpoint(
typeof(IService1), 
new WSHttpBinding(), 
"
Service1
");  
//
添加第一个终结点
31 
            sHost.AddServiceEndpoint(
typeof(IInterface1), 
new WSHttpBinding(), 
"
Interface1
");
//
第二个终结点
32 
33             ServiceMetadataBehavior smb = 
new ServiceMetadataBehavior();  
//
定义服务传输层
34 
            smb.HttpGetEnabled = 
true;   
//
定义传输的属性
35 
            sHost.Description.Behaviors.Add(smb);
36 
37             
38             sHost.Open();   
//
打开服务
39 
        }
40     }
41 }

b.用web服务器做为wcf 的宿主

实现wcf 服务发布 .svc文件

 

<%
@ServiceHost language
=
"
c#
"
 Debug
=
"
true
"
 Service
=
"
WcfService2.Service1
"
%>

 

 

在web.config 中配置wcf 服务

 

 1  
<
system.serviceModel
>
 2     
<
services
>
 3       
<
service 
name
="WcfService2.Service1"
 behaviorConfiguration
="MyServiceTypeBehaviors"
>
 4 
 5         
<!--
 This endpoint is exposed at the base address provided by host:                                        http://localhost/servicemodelsamples/service.svc  
-->
 6         
<
endpoint 
address
="Service1"
 7 
                  binding
="wsHttpBinding"
 8 
                  contract
="WcfService2.IService1"
 
/>
 9         
<
endpoint 
address
="Interface1"
10 
                  binding
="wsHttpBinding"
11 
                  contract
="WcfService2.IInterface1"
 
/>
12 
13         
<!--
 The mex endpoint is explosed at http://localhost/servicemodelsamples/service.svc/mex 
-->
14         
<
endpoint 
address
="mex"
15 
                  binding
="mexHttpBinding"
16 
                  contract
="IMetadataExchange"
 
/>
17 
18       
</
service
>
19     
</
services
>
20       
<
behaviors
>
21         
<
serviceBehaviors
>
22           
<
behavior 
name
="MyServiceTypeBehaviors"
 
>
23             
<
serviceMetadata 
httpGetEnabled
="true"
 
/>
24           
</
behavior
>
25         
</
serviceBehaviors
>
26       
</
behaviors
>
27 
28     
</
system.serviceModel
>

 

4.添加wcf 服务引用

 用.net IDE 或 用 svcutil.exe 工具 生成 wcf 服务的 stub 文件

 

5. 创建wcf 服务 的客户端

 1 
using System;
 2 
using System.Collections.Generic;
 3 
using System.ComponentModel;
 4 
using System.Data;
 5 
using System.Drawing;
 6 
using System.Linq;
 7 
using System.Text;
 8 
using System.Windows.Forms;
 9 
using Client1.ServiceReference2;
10 
11 
namespace Client1
12 {
13     
public 
partial 
class Form1 : Form
14     {
15         Service1Client service1 = 
new Service1Client();  
//
实例化终结点1
16 
        Interface1Client interface1 = 
new Interface1Client();  
//
实例化第二个终结点
17 
18         
public Form1()
19         {
20             InitializeComponent();
21             service1.Open();
22         }
23 
24         
private 
void button1_Click(
object sender, EventArgs e)
25         {
26             label1.Text = service1.GetData(
21);   
//
调用wcf的方法
27 
            CompositeType v = 
new CompositeType() ;   
//
生成传入数据协定的数据实例
28 
            v.BoolValue = 
true;
29             v.StringValue = 
"
hello
";
30             CompositeType type = service1.GetDataUsingDataContract(v);   
//
调用wcf的方法
31 
            
string s = interface1.Function1(
1);   
//
调用wcf的方法
32 
        }
33     }
34 }

 

转载于:https://www.cnblogs.com/root7/archive/2012/02/29/2371584.html

你可能感兴趣的文章
Win7下绑定IP和MAC地址提示“ARP项添加失败:拒绝访问
查看>>
tcp粘包分析
查看>>
红外遥控资料
查看>>
quartz 应用到 spring定时任务 执行两次 ,问题解决方案
查看>>
Windows store 应用调用 SharePoint Service
查看>>
缓存相关代码的演变
查看>>
java reflect(1)
查看>>
数据库端口
查看>>
第一篇博客(MarsEdit for mac)测试开源社区博客API
查看>>
【MVVM】- AngularJS 原生API
查看>>
【MVVM】- Avalon 过滤器
查看>>
ASP.NET MVC 音乐商店 - 2.控制器
查看>>
luasocks的安装以及注意事项
查看>>
PHP中的可逆加解密函数
查看>>
nginx: client intended to send too large body
查看>>
【VMCloud云平台】SCAP(四)租户(一)
查看>>
python---练习---即时标记
查看>>
linux释放内存的方法
查看>>
基于 Android NDK 的学习之旅----- C调用Java
查看>>
dns 配置
查看>>