zoukankan      html  css  js  c++  java
  • 我们一起学习WCF 第一篇初识WCF(附源码供对照学习)

         前言:去年由于工作需要我学习了wcf的相关知识,初期对wcf的作用以及为何用怎么样都是一知半解,也许现在也不是非常的清晰。但是通过项目对wcf的运用在脑海里面也算有了初步的模型。今天我就把我从开始wcf所遇到的困难以及解决方案一点点记下来,可能还有很多不足之处那我们一起共同学习。在学习之前我们有必要初步的看下百度百科对wcf的解释,让我们心中有这一个概念,然后建立项目,然后再次看概念,然后在去更深层的建立项目,然后再去理解这样反复的去做我相信可以做好wcf。那么下面我就会从初识wcf,wcf消息协定,文件传输,聊天室,wcf和socket的联合运用来写。不好之处大家提出来 我进行修正。

    第一步:创建一个解决方案

    创建一个解决方案我们需要创建4个类库

    IService:契约层(也就是我们常说的接口层)

    Service:服务层(实现契约层)

    Hosting:服务端(可以理解为服务器)

    Client:客户端(请求调用)

    第二步:创建接口层

     1  /// <summary>
     2     /// 服务契约
     3     /// </summary>
     4     [ServiceContract]
     5    public interface IWcfService
     6     {
     7         /// <summary>
     8         /// 测试wcf方法
     9         /// </summary>
    10         /// <param name="Name">请求用户名</param>
    11         /// <returns></returns>
    12         [OperationContract]
    13         string TestMethod(string Name);
    14     }
    IWcfService

    注释1:[ServiceContract] 这个表示一种特性,告诉编译器该类型属于服务契约,同理[OperationContract] 告诉编译器该类型属于操作契约

    注释2:记得引用ServiceModel

    第三步:实现接口层

    1 public class WcfService:IService.Interface.IWcfService
    2     {
    3        public string TestMethod(string Name)
    4        {
    5            return "Hello 我是:" + Name;
    6        }
    7     }
    WcfService

    第四步:实现服务端

     1 static void Main(string[] args)
     2         {
     3             Uri baseadress = new Uri("http://localhost:8080/");
     4             using (ServiceHost host = new ServiceHost(typeof (WcfService), baseadress))
     5             {
     6                 WSHttpBinding binding = new WSHttpBinding(); //绑定
     7                 binding.Security.Mode = SecurityMode.None;
     8                 host.AddServiceEndpoint(typeof(IWcfService), binding, "");
     9                 ServiceMetadataBehavior mdBehavior = new ServiceMetadataBehavior()
    10                 {
    11                     HttpGetEnabled = true
    12                 };
    13                 host.Description.Behaviors.Add(mdBehavior);
    14                 host.Opened += delegate
    15                 {
    16                     Console.WriteLine("服务启动");
    17                 };
    18                 try
    19                 {
    20                     host.Open();
    21                 }
    22                 catch (Exception ep)
    23                 {
    24                     Console.WriteLine(ep.Message);
    25                     host.Abort();
    26                     host.Close();
    27                 }
    28                 Console.ReadKey();            
    29             }   
    30         }
    服务端

    注释3:Uri baseadress=new Uri("http://localhost:8080/")  baseadress表示一个基址(绝对地址)  区别于终结点地址(相对地址)最终地址是由(基址+终结点地址组成)

    注释4:什么是终结点

    终结点有三部分组成简称叫做ABC,A表示Address,B表示Binding,C表示Contract。 

    Address:终结点地址,就是相对地址,比喻现在终结点地址是“admin”,那么地址就会是http://localhost:8080/admin。当然也可以默认“”,根据自己实际情况作出决定

    Binding:指定如何与终结点进行通信 包括这三种模式 传输协议(比喻TCP或HTTP) 消息文本(比喻2进制) 安全模式(SSL 或 SOAP )

    Contract:就是我们自己定下的契约(就是接口)

    注释5:

    ServiceMetadataBehavior mdBehavior = new ServiceMetadataBehavior()
    {
    HttpGetEnabled = true
    };

    这句话的目的:为了能让客户端通过添加服务能找到这个服务所以对主机进行描述(没有这句话无法通过基址找到服务端)

    第五步:运行服务端,客户端寻找基址

    寻找基址

    客户端运行结果:

    这样第一篇关于wcf就介绍完毕了。

     源码

  • 相关阅读:
    golang-uuid
    golang-random随机数
    git status检测不到文件变化
    vimium
    go1.11新特性,mark一下
    HTML网页滚动加载--mark一下
    docker-清理none镜像等操作
    golang websocket
    postman 快捷方式--启动图标
    tmux基本操作
  • 原文地址:https://www.cnblogs.com/LipeiNet/p/4580822.html
Copyright © 2011-2022 走看看