WCF学习笔记(一)

           最近学习WCF,主要是看artech的博客。下面是学习笔记:

(一)基本知识:
(1)WCF包含四种类型的契约:服务契约、数据契约、消息契约和错误契约.
(2)终结点(Endpoint):地址(Address)、绑定(Binding)和契约(Contract)三要素组成.Endpoint = ABC
(3)ABC介绍:
      •地址(Address):地址决定了服务的位置,解决了服务寻址的问题
      •绑定(Binding):绑定实现了通信的所有细节,包括网络传输、消息编码,以及其他为实现某种功能(比如安全、可靠传输、事务等)对消息进行的相应处理。WCF中具有一系列的系统定义绑定,比如BasicHttpBinding、WsHttpBinding、NetTcpBinding等.
       •契约(Contract):契约是对服务操作的抽象,也是对消息交换模式以及消息结构的定义。

下面是代码:

(二)WCFDemo介绍:中含有四个项目,项目如下

(1)Contracts:一个类库项目,定义服务契约(Service Contract)

        ICalculator.cs代码如下       

代码

   
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
// 添加命名空间
using System.ServiceModel;
// Contracts:一个类库项目,定义服务契约(Service Contract),引用System.ServiceMode程序集(WCF框架的绝大部分实现和API定义在该程序集中)
namespace Contracts
{
[ServiceContract(Name
= " CalculatorService " ,Namespace = " www.baidu.com " )]
public interface ICalculator
{
[OperationContract]
double Add( double x, double y);

[OperationContract]
double Subtract( double x, double y);

[OperationContract]
double Multiply( double x, double y);

[OperationContract]
double Divide( double x, double y);
}
}

 

 

(2)Services:一个类库项目,提供对WCF服务的实现

       CalculatorService.cs代码如下

     

代码

   
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
// 添加引用
using Contracts;

// 一个类库项目,提供对WCF服务的实现。定义在该项目中的所有WCF服务实现了定义在Contracts中相应的服务契约,所以Services具有对Contracts项目的引用
namespace Services
{
public class CalculatorService:ICalculator
{
public double Add( double x, double y)
{
return x + y;
}

public double Subtract( double x, double y)
{
return x - y;
}

public double Multiply( double x, double y)
{
return x * y;
}

public double Divide( double x, double y)
{
return x / y;
}
}
}

 

 

(3)Hosting:一个控制台(Console)应用,实现对定义在Services项目中的服务的寄宿

        Program.cs代码如下

       

代码

   
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
// 添加命名空间
using Contracts;
using Services;
using System.ServiceModel;
using System.ServiceModel.Description;

// Hosting:一个控制台(Console)应用,实现对定义在Services项目中的服务的寄宿,该项目须要同时引用Contracts和Services两个项目和System.ServiceMode程序集
// WCF服务需要依存一个运行着的进程(宿主),服务寄宿就是为服务指定一个宿主的过程。WCF是一个基于消息的通信框架,采用基于终结点(Endpoint)的通信手段
// 在进行真正的WCF应用开发时,一般不会直接通过编码的方式进行终结点的添加和服务行为的定义,而是通过配置的方式进行
namespace Hosting
{

class Program
{
static void Main( string [] args)
{
using (ServiceHost host = new ServiceHost( typeof (CalculatorService)))
{
host.AddServiceEndpoint(
typeof (ICalculator), new WSHttpBinding(), " http://127.0.0.1:9999/calculatorserivce " );
if (host.Description.Behaviors.Find < ServiceMetadataBehavior > () == null )
{
ServiceMetadataBehavior behavior
= new ServiceMetadataBehavior();
// 并采用了基于HTTP-GET的元数据获取方式
behavior.HttpGetEnabled = true ;
// 指定元数据的发布地址
behavior.HttpGetUrl = new Uri( " http://127.0.0.1:9999/calculatorservice/metadata " );
host.Description.Behaviors.Add(behavior);
}
host.Opened
+= delegate
{
Console.WriteLine(
" CalculaorService已经启动,请按任意键停止服务 " );
};
// 在调用ServiceHost的Open方法对服务成功寄宿后,我们可以通过该地址获取服务相关的元数据。
// 在IE地址栏上键入http: // 127.0.0.1:9999/calculatorservice/metadata,你将会得到以WSDL形式体现的服务元数据
host.Open();
Console.ReadKey();
}
}
}
}

 

 

(4)Client:实现对WCF的调用。值得注意的是,要在上面Hosting项目产生的Hosting.exe运行的情况下,右键Client添加服务引用,并在地址栏输入:http://127.0.0.1:9999/calculatorservice/metadata

        Program.cs代码如下

 

代码

   
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Client.ServiceReference1;

namespace Client
{
class Program
{
static void Main( string [] args)
{
using (CalculatorServiceClient proxy = new CalculatorServiceClient())
{

Console.WriteLine(
" x+y={2} when x={0} and y={1} " , 1 , 2 ,proxy.Add( 1 , 2 ));
Console.WriteLine(
" x-y={2} when x={0} and y={1} " , 1 , 2 , proxy.Subtract( 1 , 2 ));
Console.WriteLine(
" x*y={2} when x={0} and y={1} " , 1 , 2 , proxy.Multiply( 1 , 2 ));
Console.WriteLine(
" x/y={2} when x={0} and y={1} " , 1 , 2 , proxy.Divide( 1 , 2 ));
Console.ReadKey();

}
}
}
}

 代码下载

转载于:https://www.cnblogs.com/Joetao/articles/1893936.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值