本例中,我们通过一个关于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的信息已经显示出来,说明该服务已成功运行。

WCF(1)----服务创建的更多相关文章

  1. WCF服务创建与使用(双工模式)

    昨天发布了<WCF服务创建与使用(请求应答模式)>,今天继续学习与强化在双工模式下WCF服务创建与使用,步骤与代码如下. 第一步,定义服务契约(Service Contract),注意Se ...

  2. WCF服务创建与使用(请求应答模式)

    不说废话,直接上代码.以下服务创建是在独立的WCF类库中,若采用WCF应程程序,定义及创建服务代码均相同,但文件名不同,是CalculatorService.svc 第一步,定义服务契约(Servic ...

  3. WCF初探-13:WCF客户端为双工服务创建回调对象

    前言: 在WCF初探-5:WCF消息交换模式之双工通讯(Duplex)博文中,我讲解了双工通信服务的一个应用场景,即订阅和发布模式,这一篇,我将通过一个消息发送的例子讲解一下WCF客户端如何为双工服务 ...

  4. 使用WCF Data Service 创建OData服务

    使用WCF Data Service 创建OData服务 在 上一章 中,介绍了如何通过 OData 协议来访问 OData 服务提供的资源.下面来介绍如何创建一个 OData 服务.在这篇文章中,主 ...

  5. (纯代码)快速创建wcf rest 服务

    因为有一个小工具需要和其它的业务对接数据,所以就试一下看能不能弄一个无需配置快速对接的方法出来,百(以)度(讹)过(传)后(讹),最后还是对照wcf配置对象调试出来了: 1.创建WebHttpBind ...

  6. 如何:加载分页结果(WCF 数据服务)

    WCF 数据服务 允许数据服务限制单个响应源中返回的实体数.在此情况下,源中的最后一项包含指向下一页数据的链接.通过调用执行 DataServiceQuery 时返回的 QueryOperationR ...

  7. WCF服务与WCF数据服务的区别

    问: Hi, I am newbie to wcf programming and a little bit confused between WCF Service and WCF Data  Se ...

  8. WCF 数据服务 4.5

    .NET Framework 4.5 其他版本 WCF 数据服务(以前称为"ADO.NET Data Services")是 .NET Framework 的一个组件.可以使用此组 ...

  9. 【WCF--初入江湖】06 WCF契约服务行为和异常处理

    06 WCF契约服务行为和异常处理 一.WCF契约服务行为 [1] 服务行为可以修改和控制WCF服务的运行特性. 在实现了WCF服务契约后,可以修改服务的很多执行特性. 这些行为(或者特性)是通过配置 ...

随机推荐

  1. 编译kernel:配置

    韦东山Linux视频第1期_裸板_UBoot_文件系统_驱动初步\第10课第2节 内核启动流程分析之配置.WMV 下面以DM9000的配置为例: 在一个编译好的内核代码里,寻找CONFIG_DM900 ...

  2. openstack ovs-gre 网速慢解决方案

    Hint: if you want to check if this answer will solve your issue, execute ifconfig eth0 mtu 1400 on t ...

  3. js判断是否为pc端或移动端

    function IsPC() { var userAgentInfo = navigator.userAgent; var Agents = new Array("Android" ...

  4. javascript笔记整理(回调、递归、内置顶层函数)

    1.回调函数(通过函数的指针来调用函数,把一个函数的指针做为另一个函数的参数,当调用这个参数的时候,这个函数就叫做回调函数) a.通过指针来调用 function aa(a,b,fun){ retur ...

  5. Python 脚本帮你找出微信上删除了你的“好友“

  6. B树的实现与源代码二(删除源代码)

    int BTreeMaximum( BNode *x ) { if ( x->leaf ) { return x->key[x->size - 1]; } else { return ...

  7. Oracle、DB2、MySql、SQLServer JDBC驱动

    四种数据库JDBC驱动,还列出了连接的Class驱动名和Url Pattern,DB2包括Type 2.Type 3和Type 4三种模式.注意驱动包名称的大小写. Oralce连接驱动包名和URL ...

  8. 基于visual Studio2013解决面试题之0708字符串全排列

     题目

  9. QT---系统托盘图标不显示原因

    很久没用QT写UI相关的东西了,有些东西都忘记了,今天竟然忘记了系统托盘图标是怎么显示的了.下面说下解决方法 1.现象, 设置了QSystemTrayIcon的Icon图标,但就是不显示自己设置的图片 ...

  10. 男性在下一100层【第三层】——高仿手机银行client接口

    前言: 从<男性在下一100层>系列博文[二楼]现在出版了整整三个月后,.从上述观点和这么多朋友的意见还是比较喜欢真实类的博文. 毕竟我们都叫"攻城狮".所以要看是否这 ...