本例中,我们通过一个关于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. Flexigrid折行显示问题

    上会写的Flexigrid折行显示时,获取值有问题,报错. getRows: function(){ //add by jej var rtnList = new Array(); var objRo ...

  2. Java基础12 类型转换与多态

    链接地址:http://www.cnblogs.com/vamei/archive/2013/04/01/2992662.html 作者:Vamei 出处:http://www.cnblogs.com ...

  3. iTunes Store:隐藏和取消隐藏已购项目

    使用 Mac 或 PC 上的 iTunes 来隐藏或取消隐藏已购项目. 如何隐藏已购项目 在 Mac 或 PC 上打开 iTunes. 从 Store 菜单中,选取商店 > 登录,然后输入您的 ...

  4. boost uuid 学习笔记

    #include <vector>#include <iostream>#include <boost/uuid/uuid.hpp>#include <boo ...

  5. Qt遍历图片文件

    原地址:http://blog.sina.com.cn/s/blog_5c70dfc80100tgff.html //实现遍历某个文件下的图片文件 //如果想遍历其余类型文件,方法也一样,只需简单修改 ...

  6. Swift - 跑酷游戏开发(SpriteKit游戏开发)

    一,下面演示了如何开发一个跑酷游戏,实现的功能如下: 1,平台工厂会不断地生成平台,并且向左移动.当平台移出游戏场景时就可将其移除. 2,生成的平台宽度随机,高度随机.同时短平台踩踏的时候会下落. 3 ...

  7. Android插件化开发---执行未安装apk中的Service

    欢迎各位增加我的Android开发群[257053751​] 假设你还不知道什么叫插件化开发.那么你应该先读一读之前写的这篇博客:Android插件化开发,初入殿堂 上一篇博客主要从总体角度分析了一下 ...

  8. Boost的安装与使用(整整83篇)

    http://www.cnblogs.com/lidabo/category/542245.html

  9. libcurl编程,整整17篇

    http://www.cnblogs.com/lidabo/category/639633.html

  10. 关于WCF在IIS8注册的问题

    原文 http://social.microsoft.com/Forums/id-ID/30cf8a24-2719-4c1c-b035-3d186fbfc09c/wcfiis8?forum=wcfzh ...