zoukankan      html  css  js  c++  java
  • WCF(1)----服务创建

      本例中,我们通过一个关于Camera的服务为例子来说明WCF的开发流程,该服务比较简单,只是用来实现对Camera的添加,枚举,删除等操作。

    详细步骤如下:

    1:创建一个WCF Service Library类型的工程,名为WcfCameraService:



    创建完成之后,工程结构目录如下,VS会自动生成IService.cs和Service.cs两个文件:



    2:工程右键[Add]--->[Class], 添加一个Camera类



    Camera.cs代码如下:

    一个类型只有声明为[DataContract](数据契约), 该类型才可以被序列化并在服务器端和客户端传输,另外,需要传输的成员都要声明成[DataMember]

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    
    using System.Runtime.Serialization;
    
    namespace WcfCameraService
    {
    
        [DataContract]
        public class Camera
        {
            [DataMember]
            public string CameraID;
    
            [DataMember]
            public String CameraLocation;
    
            [DataMember]
            public String CameraInterfaceType;
        }
    }
    


    4:服务接口(IService1.cs)代码如下:

    接口类前要加[ServiceContract]标签,每个成员前要加[OperationContract]标签,以保证外部调用可以访问到该方法。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Runtime.Serialization;
    using System.ServiceModel;
    using System.Text;
    
    namespace WcfCameraService
    {
        // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService1" in both code and config file together.
        [ServiceContract]
        public interface IService1
        {
            [OperationContract]
            void AddCamera(Camera camera);
    
            [OperationContract]
            List<Camera> ScanAllCameras();
    
            [OperationContract]
            void DeleteCameras(string id);
    
            // TODO: Add your service operations here
        }
    }
    
    
    


    5:接口服务实现类(Service1.cs)代码如下:

    该类实现接口的真正功能

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Runtime.Serialization;
    using System.ServiceModel;
    using System.Text;
    
    namespace WcfCameraService
    {
        // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service1" in both code and config file together.
        [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
        public class Service1 : IService1
        {
     
            List<Camera> _Cameras = new List<Camera>();
            public void AddCamera(Camera camera)
            {
                _Cameras.Add(camera);
            }
    
            public List<Camera> ScanAllCameras()
            {
                return _Cameras;
            }
    
            public void DeleteCameras(string id)
            {
                Camera camera = _Cameras.Find(p => p.CameraID == id);
                _Cameras.Remove(camera);
            }
        }
    }
    
    
    


    6:按F5运行程序,会跳出如下两个界面:

    首先托盘下出现如下图标,系统会运行一个WCF服务器,来为我们的WCF提供托管载体。


    另外一个就是如下所示的WCF Test Client,我们看到系统已将我们的IService1加载了进来,并且对外提供了AddCamera(),ScanAllCameras(),DeleteCamera()三个可调用方法。


    7:双击ScanAllCameras(), 点击[Invoke] , 由于还没有添加任何Camera的信息,我们可以看到下框的状态栏中空空如也:



    8:双击AddCamera(),并添加Camera1,后点击[Invoke]。


    9:再双击AddCamera(),继续添加Camera2的信息:


    10:现在到了检验结果的时候了,双击ScanAllCameras(), 点击[Invoke]之后,我们看到如下信息:


    我们看到之前添加的两个Camera的信息已经显示出来,说明该服务已成功运行。

  • 相关阅读:
    ASP.NET页面生命周期总结(完结篇)
    ASP.NET页面生命周期总结(2)
    ASP.NET页面生命周期总结(1)
    springboot-简介
    python-day2
    python-day1
    jsoup解析页面
    httpclient模拟浏览器
    httpclient
    变量名和函数名重复的话
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3153258.html
Copyright © 2011-2022 走看看