C# WCF学习简单总结

WCF 学习简单总结

定义:面向服务的分布式编程框架。统一COM和.Net Remoting提供通用,可靠的分布式编程模型。

具有ABC这三个特性。

A->Address  地址

地址包含服务位置和传输协议(传输样式)这两个元素。

  •  基于http协议
  •  基于tcp协议
  • 基于进程间通信
  • 基于消息队列通信

当然还有包括https和服务总线的协议模型。

B->Binding   绑定

绑定定义了服务间通信的基本方式。常用绑定如下:

  1. 基本绑定
  2. Web服务绑定提供基于internet的通信。
  3. TCP绑定使用TCP协议实现了跨机器的通信。
  4. IPC绑定使用命名管道在进程间通信。
  5. MSMQ绑定使用消息队列通信

C->Contract  契约

契约是描述服务功能的标准方式。

  • 服务契约 描述可用服务操作
  • 数据契约  定义与交互的数据类型
  • 错误契约  定义抛出的错误操作
  • 消息契约 允许服务于消息交互

EndPoint  终结点

终结点组装ABC暴露给调用服务的客户端。

终结点的可以通过配置和编码。

WCF服务必须托管的宿主进程中,自托管,IIS发布

Mex 元数据:WCF服务元数据是ABC的原始描述信息。

元数据基于XML,自描述。客户端根据元数据反序列化生成本地代码。

 

优势:

1,统一性

由多种技术的整合,仍然是面向对象代码编写,采用托管代码编写方式。

2,互操作性

它采用SOAP通讯机制,保证了系统之间的互操作性,可以跨进程、跨机制。甚至跨平台通信,只要他支持web Service。

3,安全与可靠性

因为它包含多种协议,故有多种协议的安全机制,尤其是SOAP的。

4,兼容性

它可以在新旧平台上使用。

缺点

1 需要更多底层资源

 

简单使用:

 服务端

  1.  ServiceContract提供服务
  2. OperationContract 提供操作
  3.  DataContract提供数据

 客户端调用

  1. 使用vs添加服务引用
  2. ServiceHost创建宿主 
  3. 加载元数据结点 ServiceMetadataBehavior 
  4. 加载结点NetTcpBinding,selfHost.AddServiceEndpoint

 

题目

WCF和ASMX WebService的区别是什么?

都基于HTTP的SOAP通讯。但WCF能使用任意协议和格式(默认SOAP)。

 

怎么理解WCF的Service EndPoints?

Address:标识了服务地址和协议;

Binding:通信方式

Contract:描述的服务功能,

 

4.    怎样在WCF Service中启用操作重载(Operation Overloading )?

重载通过OperationContract的Name属性实现

private void StartAPPWCFService()
        {
           
            string serviceAddress = string.Format("net.tcp://{0}:{1}/", "localhost", CommonData.Configuration.Port);

            Dictionary<Type, Type> sevtypes = new Dictionary<Type, Type>();
           sevtypes.Add(typeof(IPersonService), typeof(PersonService));
           sevtypes.Add(typeof(ISafetyService), typeof(SafetyService));
            sevtypes.Add(typeof(IPressureService), typeof(PressureService));
           
            string endpointAddress = string.Empty;
            string tName = string.Empty;
            foreach (var item in sevtypes)
            {
                tName = item.Value.Name;
                endpointAddress = serviceAddress + tName;
                ServiceHost serviceHost = new ServiceHost(item.Value, new Uri(endpointAddress));
                //加载元数据结点
                ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
                serviceHost.Description.Behaviors.Add(smb);
                serviceHost.AddServiceEndpoint(typeof(IMetadataExchange), MetadataExchangeBindings.CreateMexTcpBinding(), "mex");
                //加载NetTcpBinding结点
                NetTcpBinding netTcpBinding = SetTCPBinding();
                serviceHost.AddServiceEndpoint(item.Key, netTcpBinding, endpointAddress);
                serviceHost.Open();
                listServiceHost.Add(serviceHost);
            }
        }

服务器端

 WCF系列 基础概念https://www.cnblogs.com/qyzBlog/p/4205574.html

面试题:http://www.cnblogs.com/superstar/archive/2013/01/17/2864629.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值