WCF服务开发与调用的完整示例
WCF服务开发与调用的完整示例
开发工具:VS2008
开发语言:C#
开发内容:简单的权限管理系统
第一步、建立WCF服务库
点击确定,将建立一个WCF 服务库示例程序,自动生成一个包括IService1.cs和Service1.cs两个类文件。我们可以直接对其修改开发我们的服务,但一般直接删除。
第二步:开发实体类
在解决方案中,添加新类Module.cs
在类中要首先引入using System.Runtime.Serialization命名空间
实体类具体代码如下:
namespace WcfServiceLib.model
{
/// <summary>
/// 模块实体
/// </summary>
[DataContract]
class Module
{
[DataMember]
public string ModuleNO;
[DataMember]
public string ModuleName;
}
}
为使在WCF服务被调用过程中科被序列化,在实体类前加[DataContract]标签,实体类每个成员前加[DataMember]标签
第三步:创建WCF服务接口
WCF服务要对外提供服务,需要创建服务的接口,声明对外服务的内容。
在解决方案中添加新的接口类imoduleservice.cs,然后引入名门空间using System.ServiceModel;
具体代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
using WcfServiceLib.model;
namespace WcfServiceLib.iservice
{
/// <summary>
/// 接口类
/// </summary>
[ServiceContract]
public interface imoduleservice
{
[OperationContract]
void AddModules(Module book);
[OperationContract]
Module GetModuleByID(string id);
[OperationContract]
void RemoveModule(string id);
[OperationContract]
void ModuleUpdate(Module book);
}
}
接口类前要加[ServiceContract]标签,每个成员前要加[OperationContract]标签,标签的作用是保证外部调用可以访问到该方法。
第四步:接口类的实现
实现第三步中声明的接口类,只有这样WCF服务才会正在提供服务。
在解决方案中添加接口实现类moduleservice,引入名称空间using System.ServiceModel;
具体代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using WcfServiceLib.iservice;
using System.ServiceModel;
using WcfServiceLib.model;
namespace WcfServiceLib.service
{
/// <summary>
/// 接口类实现
/// </summary>
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
class moduleservice : imoduleservice
{
#region imoduleservice 成员
List<Module> _Modules = new List<Module>();
public void AddModules(Module m)
{
m.ModuleNO = Guid.NewGuid().ToString();
_Modules.Add(m);
}
public Module GetModuleByID(string id)
{
Module m = _Modules.Find(p => p.ModuleNO == id);
return m;
}
public void RemoveModule(string id)
{
Module m = _Modules.Find(p => p.ModuleNO == id);
_Modules.Remove(m);
}
public void ModuleUpdate(Module module)
{
Module m = _Modules.Find(p => p.ModuleNO == module.ModuleNO);
m.ModuleName = module.ModuleName;
}
#endregion
}
}
到此为止,WCF服务的主体就开发完成了,那么如何才可以让调用者使用这个服务呢?我们就需要吧WCF服务注册并发布一下。
第五步:WCF服务发布
在VS2008以上的版本中都提供了对WCF服务可视化注册和发布的工具。
出现如下界面:
可以看到有两个终结点,第一个是服务节点,第二个是元数据节点。由于我们是用VS自带的服务库项目来创建的,配置文件中还没有删除这些信息,所以第一个节点里还保留着自带的服务信息Iservice.下面我们把这个服务更改为我们上文编写的服务的信息。
单击左侧的“Services”-“Services.Service1”在右侧的Name,弹出“服务类型浏览器”对话框,在此类型中我们找到此WCF服务项目编译出来的dll文件,双击它就可以出现此服务中的对外公布的服务,点击选中它单击确定。
然后,我们展开左侧“Services”->“WcfServiceLib.service.moduleservice”->“Endpoints”,单击第一个“Empty Name”,从右边的“EmptyProperties”中的Contract中我们可以看到,这里的Contract仍然用的是Services.IService1。按照上文的步骤在走一遍,找到DLL后确定。
最后关闭配置窗口,保存。
到此为止,服务就开发并发布完成了。接下来我们将WCF进行托管后就可以使用了。WCF服务托管有三种方式,最常用的是IIS托管。我们看一下WCF服务是如何进行IIS托管的。
第六步:WCF服务IIS发布
1、在解决方案上右键添加网站,类型选择WCF服务。
2、建立起来的新的WCF服务站点中在App_Code文件中自动为我们生成两个类文件:IService.cs和Service.cs。这两个文件对我们来说没有用,我们删掉。
3、然后添加对WCF服务库项目的引用。结果如下:
4、然后修改Service.svc文件,代码如下:
<%@ ServiceHost Language="C#" Debug="true" Service="WcfServiceLib.service.moduleservice" %>
5、在web.config上右击选择“编辑WCF配置”。
关闭WCF编辑工具,保存即完成了服务的发布配置。
6、在Service.svc上右击,选择“在浏览器中查看”,在IE中运行此服务。
7、在IIS中部署站点,建立虚拟目录指向该站点。然后浏览界面如下。
到此,WCF服务在IIS中托管成功。接下来,我们看一下如何使用WCF服务。
第七步:WCF服务的使用
1、新建Asp.net应用程序
2、右键点击“引用”--->添加服务引用
添加成功后,解决方案中文件如下:
3、后台调用WCF服务,代码如下:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ServiceReference1.imoduleserviceClient c = new WCF_Cilent.ServiceReference1.imoduleserviceClient();
c.AddModules(new WCF_Cilent.ServiceReference1.Module());
if (c.GetAllModule().Length > 0)
{
Response.Write(c.GetAllModule()[0].ModuleNO.ToString());
Response.End();
}
}
4、运行程序,出现如下调用结果,调用成功。
WCF服务开发与调用的完整示例的更多相关文章
- Eclipse、MinGW、JNI编写C++生成dll, Java端调用的完整示例(附java.lang.UnsatisfiedLinkError解决方法)
Eclipse.MinGW.JNI编写C++生成dll, Java端调用的完整示例(附java.lang.UnsatisfiedLinkError解决方法) 问题背景:之前的JNI编程都是基于And ...
- 创建一个简单的WCF程序2——手动开启/关闭WCF服务与动态调用WCF地址
一.创建WCF服务器 1.创建WCF服务器的窗体应用程序 打开VS2010,选择文件→新建→项目菜单项,在打开的新建项目对话框中,依次选择Visual C#→Windows→Windows窗体应用程序 ...
- WCF服务客户端首页调用慢的问题处理
场景: WCF服务架设于IIS服务中,走TCP协议.客户端首次调用特别慢,第一次加载完后,都正常. 解决: 把服务中需要序列化的模型所在的工程 > 属性 > 生成 > 生成序列化程序 ...
- 通讯服务类API调用的代码示例合集:短信服务、手机号归属地查询、电信基站查询等
以下示例代码适用于 www.apishop.net 网站下的API,使用本文提及的接口调用代码示例前,您需要先申请相应的API服务. 短信服务:通知类和验证码短信,全国三网合一通道,5秒内到达,费用低 ...
- 出行服务类API调用的代码示例合集:长途汽车查询、车型大全、火车票查询等
以下示例代码适用于 www.apishop.net 网站下的API,使用本文提及的接口调用代码示例前,您需要先申请相应的API服务. 长途汽车查询:全国主要城市的长途汽车时刻查询,汽车站查询 车型大全 ...
- SharePoint 2013 调用WCF服务简单示例
内容比较简单,主要记录自己使用SharePoint 2013WCF服务遇到的小问题和小经验,分享给大家,希望能够给需要的人有所帮助.好吧,进入正题! 第一部分 SharePoint 2013调用自带W ...
- C# 调用WCF服务的两种方法
项目简介 之前领导布置一个做单点登录的功能给我,实际上就是医院想做一个统一的平台来实现在这个统一的平台登录后不需要在His.Emr.Lis等系统一个个登录,直接可以登录到对应的系统,然后进行相应的操作 ...
- WCF服务运行一段时间后客户端无法连接WCF服务的解决办法 (转)
WCF服务运行一段时间后客户端无法连接WCF服务的解决办法 (转) Windows Communication Foundation (WCF)是Microsoft为构建面向服务的应用提供的分布式通信 ...
- 关于WCF报错之调用方未由服务器进行身份验证
在我们部署好WCF服务以后,调用WCF服务会出现”调用方未由服务器进行身份验证”的错误.这个错误是怎么造成的呢? 通常我们在创建WCF后,用本机调试,一切正常,没有任何问题.其实用本机测试的时候,服务 ...
随机推荐
- visual Sdudio 快捷键
项目相关的快捷键 Ctrl + Shift + B = 生成项目 Ctrl + Alt + L = 显示Solution Explorer(解决方案资源管理器) Shift + Alt+ C = 添加 ...
- 数据库的点数据根据行政区shp来进行行政区处理,python定时器实现
# -*- coding: utf-8 -*- import struct import decimal import itertools import arcpy import math impor ...
- odd_even_list
public class Solution { public ListNode OddEvenList(ListNode head) { if(head == null || head.next == ...
- Hudson(Jenkins)持续集成插件开发环境搭建
Hudson持续集成插件开发环境搭建 第一步安装java jdk,至于版本的话推荐1.6以上吧.安装好jdk设置环境变量,确保你在cmd中输入java -version有提示你jdk的版本信息等,也就 ...
- session失效后,登录页面嵌入iframe框架
在登录页面的onload方法中加入以下代码解决: //防止登录页面嵌入iframe框架 if (top.location != self.location){ top.location=self.lo ...
- 2015弱校联盟(1) - I. Travel
I. Travel Time Limit: 3000ms Memory Limit: 65536KB The country frog lives in has n towns which are c ...
- android 事件监听
步骤: 1.获取代表控件对象. 2.定义一个类,实现监听接口. 3.生成监听器对象. 4.为控件绑定监听器对象. XML <LinearLayout xmlns:android="ht ...
- 【Spring】初始化Spring IoC容器(非Web应用),并获取Bean
参考文章 Introduction to the Spring IoC container and beans BeanFactory 和ApplicationContext(Bean工厂和应用上下文 ...
- JavaScript的引擎机制
var x=1; var y=0; var z=0; function add(n){n=n+1;return n;} y=add(x); function add(n){n=n+3;return n ...
- Dialog , ProgressDialog , PopWindow 区别
本质区别: Dialog:非阻塞对话框,弹出对话框时时,后台还可以做事情,点击背景时,对话框消失 ProgressDialog:带有圆形进度或者条形进度的对话框,一般结合handler使用.任务完成后 ...