WCF学习笔记(1)---面向服务

面向服务的开发有4个原则:边界清晰; 服务自治; 契约共享; 基于策略的兼容性。

边界清晰:服务可以穿越边界发送消息给其他服务,即可以发送和接收消息,也能被发送和接收的消息形状定义服务的边界。这些边界能被良好的定义,清晰地表示,并且是唯一的服务功能访问点。

服务自治:服务自治是指服务可以控制生命周期,能控制可用性和另外服务的边界。

契约共享:契约是用来描述参与者之间的消息,他是服务公开的接口。

基于策略的兼容性:用于描述服务之间交互的底层环境。例如,一些服务需要初始发送者抈有一个有效的AD账号或者X509证书。 

 

在一个WCF中,标准消息头块中可能被包含如下的信息:

1. 最终接收者。 wsa:To

2. 初始发送者。 wsa:From

3. 错误发送地址。wsa:FaultTo

4. 消息标识。 wsa:MessageID

5. 关联消息。wsa:RelatesTo

6. 应答消息的监听者。 wsa:ReplyTo

7. 指定的操作。 wsa:Action

更多的资料,可以参考W3C的WS-Addressing规范。网址:http://www.w3.org/TR/ws-addr-core/

 

 每一个服务都需要具备三个最基本的组成部分:地址,绑定和契约。这三个部分,常常被称为WCF的ABC。

地址: 描述了服务侦听清求消息的地址。

绑定: 描述了服务如何监听消息。

契约: 描述了服务将会接收的消息的格式。 

 

契约的定义,参考如下代码: 

 1         [ServiceContract()]      

 2     public interface ICalculator
 3     {
 4         [OperationContract()]
 5         int Add(int x, int y);
 6 
 7         [OperationContract()]
 8         int Sub(int x, int y);
 9 
10         [OperationContract()]
11         int Mul(int x, int y);
12 
13         [OperationContract()]
14         int Div(int x, int y);
15     }   

 

契约的实现,参考如下代码:

 1      public  class Calculator:ICalculator
 2     {
 3          public  int Add( int x,  int y)
 4         {
 5              return x + y;
 6         }
 7          public  int Sub( int x,  int y)
 8         {
 9              return x - y;
10         }
11          public  int Mul( int x,  int y)
12         {
13              return x * y;
14         }
15          public  int Div( int x,  int y)
16         {
17              return x / y;
18         }
19    }

 

控制台宿主的实现,参考如下代码:

 1      class Program
 2     {
 3          static  void Main( string[] args)
 4         {
 5             WSHttpBinding binding =  new WSHttpBinding(SecurityMode.None);
 6             binding.MessageEncoding = WSMessageEncoding.Text;
 7 
 8             Uri addressURI =  new Uri( " http://localhost:8080/Calculator ");
 9 
10             ServiceHost host =  new ServiceHost( typeof(Calculator));
11             host.AddServiceEndpoint( typeof(ICalculator), binding, addressURI);
12             host.Opening +=  new EventHandler(host_Opening);
13             host.Opened +=  new EventHandler(host_Opened);
14 
15             host.Open();
16 
17             Console.ReadLine();
18 
19             host.Close();
20         }
21          static  void host_Opened( object sender, EventArgs e)
22         {
23             Console.WriteLine( " Host is opened! ");
24         }
25          static  void host_Opening( object sender, EventArgs e)
26         {
27             Console.WriteLine( " Host is opening! ");
28         }
29     } 

 

控制台中访问服务,参与如下代码:

 1      class Program
 2     {
 3          static  void Main( string[] args)
 4         {
 5             EndpointAddress address =  new EndpointAddress(
 6                  new Uri( " http://localhost:8080/Calculator "));
 7 
 8             WSHttpBinding binding =  new WSHttpBinding(SecurityMode.None);
 9 
10             ICalculator calc = ChannelFactory<ICalculator>.CreateChannel(binding, address);
11              int result = calc.Add( 38);
12 
13             Console.WriteLine(result);
14 
15             Console.ReadLine();
16         }
17     } 

 

转载于:https://www.cnblogs.com/prolove2/archive/2012/04/25/2469341.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值