博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WCF(一)基础整理
阅读量:4993 次
发布时间:2019-06-12

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

学习WCF之前,了解下WCF和WebService的区别。

WCF和WebService区别

  1. Web Service严格来说是行业标准,也就是Web Service 规范,它使用XML扩展标记语言来表示数据。
  2. WCF 是一个分布式应用的开发框架,属于特定的技术,或者平台。既不是标准也不是规范。Web Service能做的事它几乎都能胜任(采用 basicHttpBinding绑定的服务就是一个Web 服务),跨平台和语言更不是问题

WCF具体的几个优点:

  • WCF可以不依赖于IIS。
  • WCF可以配置成BasicHttpBinding来兼容(或者说变身成)Web Service。
  • WCF可以基于TCP或者MessegeQueue来传输数据。
  • WCF的可配置性比WS强,比如安全性。
  • WCF可以是有状态的,并支持事务。
  • WCF 支持多种通信协议 Http/Https 、TCP/UDP、MSMQ、命名管道、对等网、消息可达性、事务流等。
  • WCF 可以与ASP.NET 集成、共享一个上下文(HttpContext)。
  • WCF 支持多种消息传输格式 :text,binary,mtom,Json 等。
  • WCF 安全性要强:支持对称安全、非对称安全、消息安全、传输安全、SSL 流安全、Windows 流安全等。
  • WCF 支持多种会话模式:单向、双向、请求/响应。
  • WCF 支持REST 。
  • WCF 支持多种格式化方式。DataContractSerializer、XmlSerializer、 DataContractJsonSerializer 等。
  • WCF 支持 WAS hosting、Windows 服务 hosting、Self-Hosting、IIS hosting 等。
  • WCF 支持多种并发模式:单例、单调、会话 。

WCF中的 "A","B","C" 

 "A" (Address)-地址:就是告诉别人我wcf在何处,通过一个URI唯一地址标识,通过这个地址我们可以找到我们要调用的WCF服务。

 "B"(Binding)-绑定: Binding实现在Client和Service通信的所有底层细节。如:我们在客户端与服务端传输的时候采用的是什么样的编码,XML?Text?二进制?...采用哪种传输协议进行传输,TCP?Http?以及采用什么样的机制解决安全问题,SSL?加密?...

 "C"是契约:就是告诉别人我wcf这里有哪些东西, Contract的主要的作用是暴露某个WCF Service所提供的所有有效的方法。

项目开发中常用到的三种绑定:

第一:wsHttpBinding, 这个binding可以认为是webservice的加强版WSE,设计的目的就是用于异构系统的交互(比如java)。

第二:netTcpBinding, 这个binding可以认为是remoting的加强版,设计的目的就是用于不同机器的.net 程序交互,

第三: netMsmqBinding, 这个binding可以认为是msmq的加强版本,设计目的就是脱机环境下不同机器的.net程序交互,确保信息不丢失。

代码实际运用

笔记分享:

原作者博客地址:

 Endpoint(终结点)

服务端配置

  

 

客户端配置

<!--绑定-->

<bindings>
  <wsHttpBinding>
    <binding name="myHttpBinding">
      <security mode="None">
        <message clientCredentialType="Windows" />
      </security>
    </binding>
  </wsHttpBinding>
</bindings>

WCF Demo

数据契约(DataContract)

  • 服务契约定义了远程访问对象和可供调用的方法,数据契约则是服务端和客户端之间要传送的自定义数据类型。
  • 一旦声明一个类型为DataContract,那么该类型就可以被序列化在服务端和客户端之间传送,如下所示。
namespace WcfTest.Model{    [DataContract]    public class User    {        [DataMember(Name = "Name")]        public string UserName        {            get;            set;        }        [DataMember]        public int Age        {            get;            set;        }    }}

服务契约

[ServiceContract] public interface IService1  {        [OperationContract]        string GetData(int value);        [OperationContract]        User GetDataUsingDataContract(User u);  }

创建服务,实现接口

public class Service1 : IService1    {        public string GetData(int value)        {            return string.Format("You entered: {0}", value);        }        public User GetDataUsingDataContract(User composite)        {            if (composite == null)            {                throw new ArgumentNullException("composite");            }            if (composite.BoolValue)            {                composite.StringValue += "Suffix";            }            return composite;        }    }

 之后可以通过IIS寄宿服务

转载于:https://www.cnblogs.com/qiuguochao/p/7082854.html

你可能感兴趣的文章
python2.7.X 升级至Python3.6.X
查看>>
VS调试方法
查看>>
jquery拖拽实现UI设计组件
查看>>
javamail模拟邮箱功能获取邮件内容-中级实战篇【内容|附件下载方法】(javamail API电子邮件实例)...
查看>>
白话排序算法--冒泡排序
查看>>
imx6 18bit display
查看>>
Spring静态属性注入
查看>>
实验10:指针2
查看>>
【转】hibernate缓存:一级缓存和二级缓存
查看>>
第二个spring冲刺第3天
查看>>
AwSnap:让全版本(Windows、iOS、Android)Chrome浏览器崩溃的有趣漏洞
查看>>
线段树合并学习笔记
查看>>
AndroidAutoLayout
查看>>
样本不均衡下的分类损失函数
查看>>
node启动服务后,窗口不能关闭。pm2了解一下
查看>>
vsCode 改变主题
查看>>
【vijos】【树形dp】佳佳的魔法药水
查看>>
聚合新闻头条
查看>>
Ubuntu 关闭锁屏界面的 on-screen keyboard
查看>>
凸优化学习笔记
查看>>