当前位置: 首页 > 编程日记 > 正文

wcf入门教程

一、概述

  Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口,它是.NET框架的一部分。由 .NET Framework 3.0 开始引入。

WCF的最终目标是通过进程或不同的系统、通过本地网络或是通过Internet收发客户和服务之间的消息。

WCF合并了Web服务、.net Remoting、消息队列和Enterprise Services的功能并集成在Visual Studio中。

WCF专门用于面向服务开发。

二、基于Asp.net 的应用程序开发与面向服务开发

wcf

在基于Asp.net 的应用程序开发中,我们由客户机的浏览器访问应用程序服务器,然后通过应用程序服务器中的数据库连接去连接数据库服务器,读取或是操作数据,有时候可能会多一个文件服务器。大家可以观察到,基本上所有的应用都放在了一台服务器上,但对于一个,由于业务上的需要(如:与外部系统交互),一台服务器很难支持所有的应用。我们再看下面的图:

wcf

客户机使用浏览器访问服务器A,服务器A为了业务需要与其他各种应用部署在服务器B、C、D....再通过WCF技术互相通信,相互访问...然而面向服务的好处不仅仅在此,他还提供了不同语言不同操作系统的可交互性..由于本文不是介绍SOA的文章,感兴趣的同学可以参见:SOA

三、第一个WCF程序

1. 新建立空白解决方案,并在解决方案中新建项目,项目类型为:WCF服务应用程序。建立完成后如下图所示:

wcf

2.删除系统生成的两个文件IService1.cs与Service1.svc。

3.添加自定义的WCF【服务文件】User.svc,此时vs2010会自动生成WCF接口文件IUser.cs,我们在IUser中定义WCF方法ShowName,在User.svc.cs对该接口的方法进行实现。

代码如下:

复制代码
 1 using System.ServiceModel;2 3 namespace WCFService4 {5     [ServiceContract]6     public interface IUser7     {8         [OperationContract]9         string ShowName(string name);
10     }
11 }
12 
13 
14 namespace WCFService
15 {
16     public class User : IUser
17     {
18         public string ShowName(string name)
19         {
20             string wcfName = string.Format("WCF服务,显示姓名:{0}", name);
21             return wcfName;
22         }
23     }
24 }
复制代码

大家可以看到,在WCF中的接口与普通接口的区别只在于两个上下文,其他的和我们正常学习的接口一样。定义这个上下文要添加System.ServiceModel的引用。

[ServiceContract],来说明接口是一个WCF的接口,如果不加的话,将不能被外部调用。

[OperationContract],来说明该方法是一个WCF接口的方法,不加的话同上。

此时我们的第一个WCF服务程序就建立好了,将User.svc“设为起始页”,然后F5运行一下试试,如下图所示,VS2010自动调用了WCF的客户端测试工具以便我们测试程序:

我们双击上图中的 ShowName() 方法,出现如下图:

在请求窗口中的值中输入参数“你的姓名”,然后点击“调用”,在响应窗口中会出现返回值“WCF服务,显示姓名:你的姓名”,说明测试成功,点击下面的XML也可以看到XML的数据传输。我们现在建立好了服务的应用程序和业务逻辑,即非常简单的打印姓名的方法,测试也成功了。那么我们怎么用呢?

四、场景

我们设计的场景是在生产中经常应用的场景,把WCF程序寄宿在IIS之上。假设场景如下:A服务器和B服务器。我们把我们刚刚建立的WCF程序“部署”在B服务器上(本教程的A,B服务器都放是我自己的一台机器),我们的目标是在A服务器的应用程序来访问B服务器的WCF程序,实现服务器端的应用程序通讯。

五、将WCF程序寄宿在B服务器的IIS之上

  首先我们将WCF应用程序发布一下,然后部署在B服务器的IIS之上,如下图所示:

鼠标右键浏览Uesr.svc,在游览器中出现如下图所示,说明服务部署成功。

上图中的http://localhost/User.svc?wsdl即为我们要引用的服务地址。

六、在客户端[A服务器]创建服务的引用

  我们这里以Web应用程序为例,建立地物理地址为本机,但是大家可以想像成B服务器是远程计算机,localhost为一个其他的IP地址。

新建解决方案,并且创建ASP.NET Web应用程序的项目。命名为:WCFClient,如下图所示:

(1)新建Asp.net页面,命名为:WcfTest.aspx。

(2)添加在第五步中部署的服务的引用。如下图所示:

wcf

此时弹出添加服务引用的窗体,如下图所示:

我们在地址里写上我们寄宿在IIS上的WCF服务的地址服务路径,此处为:http://localhost/User.svc?wsdl,在名称空间处填写WCFService[此名称空间要在下面的客户端中引用]然后点击“前往”-->“确定”按钮。此时我们完成了对服务的引用。我们再次查看解决方案,里面多了Service References的文件夹,通过资源管理器打开后里面多了些文件,这些文件用于客户端向服务端的调用,现在先不用管他。

、使用WCF服务端的方法

  WcfTest.aspx的代码如下:

复制代码
 1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WCFTest.aspx.cs" Inherits="WCFClient.WCFTest" %>2 3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">4 <html xmlns="http://www.w3.org/1999/xhtml">5 <head runat="server">6     <title></title>7 </head>8 <body>9     <form id="form1" runat="server">
10     <asp:TextBox ID="txtName" runat="server"></asp:TextBox><br />
11     <asp:Button ID="btnSubmit" runat="server" Text="测试WCF服务" OnClick="btnClick" />
12     </form>
13 </body>
14 </html>
15 
16 using System;
17 using System.Collections.Generic;
18 using System.Linq;
19 using System.Web;
20 using System.Web.UI;
21 using System.Web.UI.WebControls;
22 
23 //引用WCF服务的名称空间
24 using WCFClient.WCFService;
25 
26 namespace WCFClient
27 {
28     public partial class WCFTest : System.Web.UI.Page
29     {
30         protected void Page_Load(object sender, EventArgs e)
31         {
32 
33         }
34 
35         protected void btnClick(object sender, EventArgs e)
36         {
37             UserClient user = new UserClient();
38             string result = user.ShowName(this.txtName.Text);
39             Response.Write(result);
40         }
41     }
42 }
复制代码

上面中的UserClient类是在添加引用的时候生成的服务端User类的客户端代理类,一般客户端代理类名称都会是**Client。我们运行一下看下效果。

通过以上的例子,我们完成了由A服务器的应用向B服务器中WCF提供的方法的调用。这个例子比较简单,对于经常开发B/S结构应用程序的同学们来说比较好理解。

转载于:https://www.cnblogs.com/TBW-Superhero/p/5570503.html

相关文章:

Swift iOS : 字体图标

厌倦了使用位图在xcode的Assets.xcassets内&#xff0c;因为麻烦&#xff0c;包括如下的麻烦&#xff1a; 找图图需要分尺寸需要操作员类似工作去管理 然后&#xff0c;现在有了字体图标&#xff0c;就方便多了&#xff1a; 比较成熟的几套库&#xff0c;用名字就可以查矢量…

巧用Excel 2010数据透视表制作销售报表

小刘需要根据2010-2011两年间的订单记录创建季度报表&#xff0c;以便分析各类图书的销售情况。面对如此庞大的订单记录&#xff0c;该从何下手呢? 其实最快捷的办法是使用Excel 2010创建数据透视表&#xff0c;以快速合并和比较这些数据。在数据透视表中&#xff0c;可以很清…

Spring的基础应用

实验目的及要求 掌握ApplicationContext容器使用属性setter方法注入的实现&#xff1b;了解Spring的概念和优点&#xff1b; 熟悉Spring中的IOC和DI 实验环境 Java jdk 1.8&#xff1b;apache-maven-3.6.0&#xff1b;Myeclipse C10&#xff1b; 实验内容&#xff1a; 任务一…

iOS App 连接外设的几种方式

原创作者: Max_Marry 文章地址: http://www.jianshu.com/p/852bf92c5c92 随着近年来车联网和物联网的兴起&#xff0c;智能家居和智能硬件的逐步火热&#xff0c;越来越多的 App 被用来跟硬件设备进行来连接&#xff0c;获取硬件相关信息用以展示或者发送指令控制硬件来提供服务…

Android深度探索(卷1)HAL与驱动开发第五章总结

开发板是开发和学习嵌入式技术的主要硬件设备&#xff0c;开发板的型号和种类很多&#xff0c;目前流行的是基于S3C6410 ARM11架构的开发板&#xff0c;S3C6410是由三星公司推出的一款低功耗&#xff0c;高性价比的RISC处理器&#xff0c;它基于ARM11内核&#xff0c;可广泛应用…

controlfile

1、如何恢复控制文件 Your database instance is started using the server parameter file (SPFILE). Control files are multiplexed and stored on different disks. Because of a disk failure, you lost one of these control files. You replaced the damaged disk. What…

Spring servlet

1、修改pom.xml文件&#xff0c;添加以下内容&#xff1a; 代码&#xff1a; <dependency><groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> </dependency> <dependency> <groupId>org.apac…

iOS传感器:实现一个随屏幕旋转的图片

作者 非典型技术宅 关注 2017.05.24 17:22* 字数 1568 阅读 351评论 7喜欢 14在写上一个动画系列的时候学到了非常多的知识&#xff0c;也认识了很多人。例如受邀进入了某个神秘的动效组织&#xff0c;全是一线的大神啊。有UI的大牛、UED的大神、iOS的大神。加入组织可以阅读这…

构建之法-读后感

大二快结束&#xff0c;从大二初开始接触项目的工程开发&#xff0c;到现在也差不多一年了。之前一直在用c# 结合winform开发一些简单的桌面应用&#xff0c;也看过一些是实验室学长们用c#和其他多种技术结合 开发出来的系统&#xff0c; 接触过其源代码&#xff0c;为深入了解…

Java 理论与实践: 非阻塞算法简介——看吧,没有锁定!(转载)

简介&#xff1a; Java™ 5.0 第一次让使用 Java 语言开发非阻塞算法成为可能&#xff0c;java.util.concurrent 包充分地利用了这个功能。非阻塞算法属于并发算法&#xff0c;它们可以安全地派生它们的线程&#xff0c;不通过锁定派生&#xff0c;而是通过低级的原子性的硬件原…

pring Boot与MyBatista的集成

1、准备数据库环境&#xff0c;在MySQL数据库中&#xff0c;创建一个名为microservice的数据库&#xff0c;在microservice中创建表tb_user&#xff0c;并在表中插入3条数据&#xff1b; 2、创建项目&#xff0c;添加依赖。 3、编写配置文件&#xff0c;在application.properti…

iOS中UIDynamic物理仿真详解

本文中所有代码演示均有GitHub源码&#xff0c;点击下载 UIDynamic简介 简介&#xff1a; UIKit动力学最大的特点是将现实世界动力驱动的动画引入了UIKit&#xff0c;比如动力&#xff0c;铰链连接&#xff0c;碰撞&#xff0c;悬挂等效果&#xff0c;即将2D物理引擎引入了UIKi…

ADO与ADO.NET的区别与介绍

1. ADO与ADO.NET简介ADO与ADO.NET既有相似也有区别&#xff0c;他们都能够编写对数据库服务器中的数据进行访问和操作的应用程序&#xff0c;并且易于使用、高速度、低内存支出和占用磁盘空间较少&#xff0c;支持用于建立基于客户端/服务器和 Web 的应用程序的主要功能。但是A…

cucumber 文件目录结构和执行顺序

引用链接&#xff1a;http://www.cnblogs.com/timsheng/archive/2012/12/10/2812164.html Cucumber是Ruby世界的BDD框架&#xff0c;开发人员主要与两类文件打交 到&#xff0c;Feature文件和相应的Step文件。Feature文件是以 feature为后缀名的文件&#xff0c;以Given-When-T…

Spring Boot与Redis的集成

1、在Linux中安装Redis。 1.1、在线下载软件 1.2、安装软件 1.3、修改配置文件 1.4、启动Redis&#xff1b; 2、添加Redis起步缓存&#xff0c;在pom.xml中添加Spring Boot支持Redis的依赖配置。 3、添加缓存注解。 3.1、在引导类Application.java中&#xff0c;添加EnableCac…

Redis3.0 配置文件说明

背景&#xff1a; 以前有篇文章已经结果过了&#xff0c;现在复习一下&#xff0c;对Redis3.0进行说明&#xff1a; 参数说明&#xff1a; #redis.conf # Redis configuration file example. # ./redis-server /path/to/redis.conf################################## INCLUDES…

Core ML 文档翻译

概览 借助 Core ML&#xff0c;您可以将已训练好的机器学习模型&#xff0c;集成到自己的应用当中。 所谓已训练模型 (trained model)&#xff0c;指的是对一组训练数据应用了某个机器学习算法后&#xff0c;所生成的一组结果。举个例子&#xff0c;通过某个地区的历史房价来训…

jquery radio 取值

网上流行的说法就是 $(input[nameaaa][checked]).val()能取到选中项的value&#xff0c;但我测试后发现只在IE下有效&#xff0c;在firefox和Chrome中不论选中哪一项&#xff0c;或者不选&#xff0c;取到的值都是第一项的value正确做法应该是 $("input[nameaaa]:checked&…

Spring Boot与ActiveMQ的集成

1、ActiveMQ软见得安装配置 1.1、上传软件包并解压 1.2、配置并启动 1.3、浏览器验证 2、添加ActiveMQ起步依赖&#xff1b; 3、创建消息队列对象&#xff0c;在Application.java中编写一个创建消息队列的方法&#xff0c;其代码展示如下&#xff1b; 4、创建消息生产者&#…

iOS图片精确提取主色调算法iOS-Palette(附源码)

源码可见:[直接点击] 1.背景 图像提取主色调来增强浸入式交互体验的场景越来越常见&#xff0c;如知乎网页版的个人主页&#xff0c;Instagram的图片色调筛选。那如何去获得一张照片的主色调呢&#xff1f;Google在Android.support.v7里&#xff0c;给出了一个叫做Palette(调色…

jQuery UI 之 LigerUI 快速入门

LigerUI 快速开发UI框架 LigerUI 是基于jQuery 的UI框架&#xff0c;其核心设计目标是快速开发、使用简单、功能强大、轻量级、易扩展。简单而又强大&#xff0c;致力于快速打造Web前端界面解决方案&#xff0c;可以应用于.net,jsp,php等等web服务器环境。 LigerUI有如下主要特…

HTML5标签学习之~~~

<article> 标签 article 字面意思为“文章”。在web页面中表现为独立的内容&#xff0c;如一篇新闻&#xff0c;一篇评论&#xff0c;一段名言&#xff0c;一段联系方式。这其中包括两方面&#xff0c;一为整个页面的主旨内容&#xff0c;另外就是一些辅助内容。<arti…

将Spring Boot项目打包成jar包war包

任务一&#xff1a;将Spring Boot项目打包成jar包 1、在pom.xml文件中添加依赖 2、通过cmd命令行来进行打包jar包&#xff08;首先进入项目的目录中&#xff09; 3、进入项目中的target目录下查看包 4、使用命令执行jar包&#xff1b; 5、浏览器查看输出结果 任务二&#xff1…

手把手教你在应用里用上iOS机器学习框架Core ML

2017-06-10 Cocoa开发者社区2017年的WWDC上&#xff0c;苹果发布了Core ML这个机器学习框架。现在&#xff0c;开发者可以轻松的使用Core ML把机器学习功能集成到自己的应用里&#xff0c;让应用变得更加智能&#xff0c;给用户更牛逼的体验。 Core ML是做什么的 我们知道&…

Linux服务器安装JDK、Tomcat配置web网站

安装JDK cd /usr/java/jdk【打开目录】 tar -xvzf jdk-7u79-linux-x64.gz【解压安装包】 vi ~/.bashrc【编辑环境变量】############################export JAVA_HOME/usr/java/jdk/jdk1.7.0_79export JAVA_BIN$JAVA_HOME/binexport JAVA_LIB$JAVA_HOME/libexport CLASSPATH.…

sql help cs

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Configuration;using System.Data;using System.Data.SqlClient;using System.Collections; /// <summary> /// SQLHelper 的摘要描述 /// </summary>publ…

Spring Cloud应用开发(一:使用Eureka注册服务)

1、搭建maven父工程&#xff1b; 注&#xff1a;在MyEclipse中&#xff0c;创建一个Maven父工程cloud&#xff0c;并在工程的pom.xml中添加Spring Cloud的版本依赖等信息。 2、搭建服务端工程。 注&#xff1a;在父工程cloud中&#xff0c;创建Maven子模块ms-spring-eureka-s…

SRWebSocket源码浅析(上)

2017-06-12 涂耀辉 Cocoa开发者社区一. 前言&#xff1a; WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信——可以通俗的解释为服务器主动发送信息给客户端。 区别于MQTT、XMPP等聊天的应用层协议&#xff0c;它是一个传输通讯协…

Mason 简单笔记

Mason的对象 ------------------------------- Request对象 Mason有两个全局预处理对象叫做&#xff1a;$r和$m $r是mod_perl的请求对象&#xff0c;它提供了Perl的API来执行Apache的请求。 $r->;uri #获得用户请求的地址 $r->;content_type #获得…

多级页表如何节省内存

在谈到多级页表的优势的时候&#xff0c;很多地方都是这么说的&#xff1a;32位地址空间的分页系统&#xff0c;如果页面大小为4KB&#xff0c;则每个进程可达1M个页&#xff0c;假设每个页表项占用4个字节&#xff0c;这样每个进程仅仅页表项就占用了4MB连续的内存空间。 那么…