Wcf 基础编程

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值