• WCF学习笔记(三)WCF基础


    1.地址(Address)

    在WCF中,每一个服务都有唯一的地址。

    WCF支持下列传输样式

    • HTTP/HTTPS
    • TCP
    • IPC
    • Peer network
    • MSMQ
    • Service bus

    地址通信通常采用以下格式:

    [基地址]/[可选的URI]

    基地址通常采用以下格式:

    [传输协议]://[机器名或域名][:可选端口]

    下面是一些地址的示例:

    http://localhost:8001

    http://localhost:8001/MyService

    net.tcp://localhost:8002/MyService

    net.pipe://localhost/MyPipe

    net.msmq://localhost/private/MyQueue

      传输协议 默认端口 示例
    TCP地址 net.tcp 808 net.tcp://localhost:8002/MyService
    HTTP地址 http,https http(80),https(443) http://localhost:8001
    IPC地址 net.pipe   net.pipe://localhost/Mypipe
    MSMQ地址 net.msmq   net.msmq://localhost/private/MyService
    服务总线地址 sb,http,https   sb://MyNamespace.servicebus.window.net/
           

    几种传输协议的特点

    a.HTTP/HTTPS

    HTTP提供简单的请求-回复(Request-Response)消息传输方式

    HTTP是无状态的,每次HTTP请求都是相互独立的

    HTTP是无连接的,基于HTTP的数据传输无须事先打开连接

    b.Net.TCP

    TCP是基于连接的传输协议,在开始进行数据传输之前,通过客户端和服务器之间的3次握手创建连接;在结束传输之后,通过4次握手终止连接

    TCP是有状态的,由于数据传输在一个确定的连接中进行,因此可以保持每次数据传输的状态

    TCP支持全双工通信,一旦连接成功创建,数据就可以在两个方向上同时传输。

    TCP支持可靠通信,IP协议本身提供的数据传输是不可靠的,数据的可靠性只能通过TCP来保证。

    c.Net.Pipe

    命名管道是windows平台及UNIX系统下实现跨进程通信的标准实现方式,WCF只将命名管道专门用于同一台机器的跨进程通信。所以基于命名管道的URI的主机名,域名,IP地址部分只能是本机的机器名,localhost或127.0.0.1

    d.Net.Msmq

    即消息队列

    2.契约(Contracts)

    WCF的所有服务都会公开为契约(Contracts)。契约与平台无关,是描述功能的标准方式。WCF定义的契约有以下四种类型。

    • 服务契约(Service Contracts)

    服务契约描述了客户端能够执行的服务操作。

    只有接口和类可以标记为Servicecontract属性。

    契约与类型的访问限定无关。

    类型的所有成员也不一定就是契约的一部分。必须使用OperationContractAttribute属性显著标明哪些方法需要暴露为WCF契约中的一部分。

    WCF只允许将OperationContract属性标记到方法上。

    契约操作不能使用引用对象参数,只允许使用基本类型或者数据契约。

    [ServiceContract]
        interface IMyContract
        {
            [OperationContract]
            string MyMethod(string text);
    
            //不会成为契约的一部分
            string MyOtherMethod(string text);
        }
    
    class MyService:IMyContract
        {
            public string MyMethod(string text)
            {
                return "Hello" + text;
            }
    
            public string MyOtherMethod(string text)
            {
                return "Hello" + text;
            }
        }

     还有WCF允许直接将ServiceContract属性标记到服务类上,但我们应该尽量避免,这样有利于在不同的场景下使用契约。

    服务契约的默认命名空间是Http://tempuri.org,也可以自定义命名空间。

    默认情况下,契约公开的名称就是接口名,也可以使用Name属性定义别名。

    类似的,操作公开的名称就是方法名,同样也可以用Name属性定义别名。

    [ServiceContract(Namespace="MyNameSpace",Name="IMy")]
        interface IMyContract
        {
            [OperationContract(Name="Method")]
            string MyMethod(string text);
    
            //不会成为契约的一部分
            string MyOtherMethod(string text);
        }
    • 数据契约(Data Contract)

    数据契约定义了与服务交互的数据类型。

    • 错误契约(Fault Contract)

    错误契约定义了服务抛出的错误,以及服务处理错误和传递错误到客户端的方式。

    • 消息契约(Message Contract)

    消息契约允许服务直接与消息交互,可以是类型化的,也可以是非类型化的。

  • 相关阅读:
    题解:luoguP1070 道路游戏(DP)
    题解:luoguP2577【ZJOI2005】午餐(DP)
    题解:bzoj1801: [Ahoi2009]chess 中国象棋
    题解:bzoj1878: [SDOI2009]HH的项链
    SpringBoot静态资源文件 lion
    简要的Log4Net 应用配置
    Web Service 初级教程
    log4Net 动态改变写入文件
    Ornament 类型资源权限
    JQuery 引发两次$(document).ready事件
  • 原文地址:https://www.cnblogs.com/HelloMyWorld/p/3048945.html
Copyright © 2020-2023  润新知