• WCF练习小程序总结


    1、什么是WCF

    严格的说,WCF就是专门用于服务定制、发布与运行以及消息传递和处理的一组专门类的集合,也就是所谓的“类库”。这些类通过一定方式被组织起来,共同协 作,并为开发者提供了一个统一的编程模式。WCF之所以特殊,是在于它所应对的场景与普通的.NET类库不同,它主要用于处理进程间乃至于机器之间消息的 传递与处理,同时它引入了SOA的设计思想,以服务的方式公布并运行,以方便客户端跨进程和机器对服务进行调用。实际上,WCF就是微软对于分布式处理的 编程技术的集大成者,它将DCOM、Remoting、Web Service、WSE、MSMQ集成在一起,从而降低了分布式系统开发者的学习曲线,并统一了开发标准。

    2、WCF服务需要依存一个运行着的进程(宿主),服务寄宿就是为服务指定一个宿主的过程。WCF是一个基于消息的通信框架,采用基于终结点(Endpoint)的通信手段。终结点由地址(Address)、绑定(Binding)和契约(Contract)三要素组成。Address是Endpoint的网络地址,它标记了消息发送的目的地。Binding描述的是如何发送消息,例如消息发送的传输协议(如 TCP,HTTP),安全(如SSL,SOAP消息安全)。Contract则描述的是消息所包含的内容,以及消息的组织和操作方式,例如是单向,双向还 是请求/响应方式。服务寄宿的目的就是开启一个进程,为WCF服务提供一个运行的环境。通过为服务添加一个或多个终结点,使之暴露给潜给的服务消费者。服务消费者最终通过相匹配的终结点对该服务进行调用。我们可以完全通过代码的方式完成所有的服务寄宿工作,也可以在配置文件中配置。项目中一般都会使用配置文件进行管理。

    <?xml version="1.0" encoding="utf-8"?>
    <!--服务端配置-->
    <configuration>
      <system.serviceModel>
        <services>
          <service name="WcfService1.Service1">
            <host>
              <baseAddresses>
                <add baseAddress="http://localhost:8098/Service1"/>
              </baseAddresses>
            </host>
            <endpoint address="" binding="wsHttpBinding" contract="WcfService1.IService1"></endpoint>
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior>
              <serviceMetadata httpGetEnabled="True"/>
              <serviceDebug includeExceptionDetailInFaults="False"/>
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel>
    </configuration>
    
    <!--客户端配置-->
    <!--<?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <system.serviceModel>
            <bindings>
                <wsHttpBinding>
                    <binding name="WSHttpBinding_IService1" />
                </wsHttpBinding>
            </bindings>
            <client>
                <endpoint address="http://localhost:8098/Service1" binding="wsHttpBinding"
                    bindingConfiguration="WSHttpBinding_IService1" contract="ServiceReference1.IService1"
                    name="WSHttpBinding_IService1">
                    <identity>
                        <userPrincipalName value="lining@shanghai3h.com" />
                    </identity>
                </endpoint>
            </client>
        </system.serviceModel>
    </configuration>-->
            static void Main(string[] args)
            {
                 //创建宿主的基地址
                Uri baseAddress = new Uri("http://localhost:8098/Service1");
                 //创建宿主
                 using (ServiceHost host = new ServiceHost(typeof(Service1), baseAddress))
                 {
                     //向宿主中添加终结点
                     host.AddServiceEndpoint(typeof(IService1), new WSHttpBinding(), "");
                     //将HttpGetEnabled属性设置为true
                     ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
                     smb.HttpGetEnabled = true;
                     //将行为添加到Behaviors中
                     host.Description.Behaviors.Add(smb);
                     //打开宿主
                     host.Open();
                     Console.WriteLine("WCF中的HTTP监听已启动....");
                     Console.ReadLine();
                     host.Close();
                 }
            }

     3、WCF的典型宿主包括以下四种:
    (1)、"Self-Hosting" in a Managed Application(自托管宿主)(2)、Managed Windows Services(Windows Services宿主)(3)、Internet Information Services(IIS宿主)(4)、Windows Process Activation Service(WAS宿主)

    4、我做的小程序就是按照网上的例子(我的第一个WCF程序)做的,例子很简单,可能需要注意一下几点:

    (1)、含有WCF服务的程序在运行时会报错(权限不足),这时候需要以管理员方式运行
    (2)、常用的序列化和反序列化有三种:XML、Binary、Soap,它的作用主要是为了在进程或机器间进行数据的传递与交互
    (3)、WCF中被[DataMember]修饰的属性必须同时具备get和set方法
    (4)、XmlSerializer类在System.Xml命名空间下,这个类可以系列化那些即使没有添加[Serializable]特性的类型
    (5)、配置文件中address="http://localhost:8098/Service1"的端口号 与 wcf服务属性中特定端口必须不同!!

  • 相关阅读:
    JavaScript
    并发编程基础
    基于 TCP & UDP 协议的 socket 通信
    struct 模块 & subprocess 模块
    Python中的异常处理
    网络编程基础
    Json 模块补充
    冒泡排序
    OOP 反射 & 元类
    OOP 内置函数
  • 原文地址:https://www.cnblogs.com/len0031/p/4152611.html
Copyright © 2020-2023  润新知