引言

  近期在项目中见到了师哥们常常谈到的WCF这方面的知识。当时在写程序的时候也没有理解wcf究竟是个什么东西?

以及我们为什么在项目中会採用这种框架来实现,仅仅是依照师哥他们写好的代码编写同样格式的代码。随着代码敲

的越来越多就慢慢的懂得了如何实现client和服务端的连同,可是wcf真正的执行机制还是一点也不懂,近期在听师

哥们讲课的时候有解说了一些关于WCF的知识,自己感觉应该好好理解这方面的知识了,而且这个东西在项目中是非

经常见的,以下就结合我实现的一个小Demo来和大家分享一下。


 当中一些最主要的概念。大家能够參考

url=14j9NZcI26q3ijuMK-FBI1NYpsFfmSCI6TF1HwsW6S9Sl6YILoBAgO5YB31_cdQBUT3Bx3LALLzi-8xcaIKNjK">百度百科关于wcf的介绍。在这里给大家两张图对照一下,能非常好的体现出


wcf的用途:

    基于ASP.net的应用程序与面向服务开发
                    
在基于Asp.net 的应用程序开发中,我们由客户机的浏览器訪问应用程序server,然后通过应用程序server中的数据

库连接去连接数据库server,读取或是操作数据,有时候可能会多一个文件server。大家能够观察到,基本上全部的

应用都放在了一台server上,但对于一个,因为业务上的须要(如:与外部系统交互),一台server非常难支持全部的

应用。以下来看这样一张图
                     
客户机使用浏览器訪问serverA,serverA为了业务须要与其它各种应用部署在serverB、C、D....再通过WCF技术互相

通信,相互訪问...然而面向服务的优点不只在此。他还提供了不同语言不同操作系统的可交互性..

    以下我们就開始创建一个client和服务端分离的wcf应用程序:

  1、创建我们的wcf的服务端——在新建项目的时候选择WCF服务应用程序

     

                          

   2、从图中我们能够看出,在我们建立好的解决方式中有默认的两个service.svc和Iservice.cs文件。我们能够将

这两个文件删除。然后加入我们自己的wcf服务。步骤如图:



                     

  3、在解决方式里面我们能够看见,当我们加入了一个User.svc后。vs会自己主动生成WCF借口IUser.cs,这是我们须要

在IUser.cs定义WCF方法ShowName,在User.svc.cs对该接口的方法进行实现。代码例如以下
  
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text; namespace DemoServiceWCF
{
// 注意: 使用“重构”菜单上的“重命名”命令,能够同一时候更改代码和配置文件里的接口名“IUser”。
[ServiceContract]
public interface IUser
{
[OperationContract]
string ShowName(string name);
}
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text; namespace DemoServiceWCF
{
// 注意: 使用“重构”菜单上的“重命名”命令,能够同一时候更改代码、svc 和配置文件里的类名“User”。
// 注意: 为了启动 WCF 測试client以測试此服务,请在解决方式资源管理器中选择 User .svc 或 User .svc.cs,然后開始调试。
public class User : IUser
{
public string ShowName(string name)
{
string wcfName = string.Format("WCF服务,显示姓名:{0}", name);
return wcfName; }
}
}

  大家在wcf接口中看到与平时我们不同的就是它多了两个标签。其余的和我们正常的学习的接口是一样的,加入这

两个标签是依赖System.ServiceModel的引用。

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

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


事实上简单来说这两个标签就是区分普通接口和普通方法的一个标示。就像我们提高班的第十期和第十一期还有十二期

一样,比如如今十期有一个叫张三的同学,十一期也有一个叫张三的同学,这样我们找人的时候必须得有这个不同的

期号来区分。

 4、以下来看一下执行的效果,将User.svc设为起始页后执行。

       

 这样我们的wcf服务端基本上就能够用了。剩下的就是将这个服务端公布然后部署到IIS上,就能够供client使用

了,在这我就不给大家具体解释如何在IIS上公布wcf,我们就使用一个简单的办法就是直接预览user.svc,如图:
    
  
  事实上WCF的应用场景能够大概能够这样简单的描写叙述一下:我们设计的场景是在生产中常常应用的场景。把WCF程序寄

宿在IIS之上。如果场景例如以下:Aserver和Bserver。

我们把我们刚刚建立的WCF程序“部署”在Bserver上(本教程的


A,Bserver都放是我自己的一台机器),我们的目标是在Aserver的应用程序来訪问Bserver的WCF程序,实现server端

的应用程序通讯。

 以下来看我们client的创建

  1、首先我在client创建了一个web应用程序;
                  

 2、以下我们须要加入一个服务引用如图,填写好地址后点击转到button,然后点击确定

            

 引用完毕后,我们在解决方式中会发现多出一个文件:

                      
  3、页面中的代码例如以下
 
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="User.aspx.cs" Inherits="DemoClientWCF.User" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:TextBox ID="txtName" runat="server"></asp:TextBox><br />
<asp:Button ID="btnSubmit" runat="server" Text="測试WCF服务" OnClick="btnClick" />
</form>
</body>
</html>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using DemoClientWCF.ServiceReference; namespace DemoClientWCF
{
public partial class User : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{ } protected void btnClick(object sender, EventArgs e)
{
UserClient user = new UserClient();
string result = user.ShowName(this.txtName.Text);
Response.Write(result);
}
}
}

4、以下给大家解释几个比較重要的代码


  1、using DemoClientWCF.ServiceReference;这个引用中 DemoClientWCF为我们client的命名空间。

ServiceReference为我们在加入服务引用的时候。须要我们记住的那个名称。

 2 UserClient user = new UserClient();UserClient就是我们在加入引用的时候生成的服务端User类的client代理

类,一般client的代理类名称都会是***Client。当中User就是我们服务端加入的那个wcf服务(user.svc)的名称。

  
 到这我们就完毕了一个非常easy的WCF的小Demo,同一时候完毕了由Aserver的应用小Bserver中WCF提供的方法的调用。


 小结

 这个小Demo算是我们学习WCF的最基础的入门,在我看来对于刚入门的读者们来说应该是非常easy接受的,也算是完毕

了一个基础的教程。随着对wcf的更深入的学习,我会继续更新此类博客来和大家交流,假设此博客有什么不懂的地

方能够留言交流。

  

WCF基础教程——vs2013创建wcf应用程序的更多相关文章

  1. WCF基础教程之异常处理:你的Try..Catch语句真的能捕获到异常吗?

    在上一篇WCF基础教程之开篇:创建.测试和调用WCF博客中,我们简单的介绍了如何创建一个WCF服务并调用这个服务.其实,上一篇博客主要是为了今天这篇博客做铺垫,考虑到网上大多数WCF教程都是从基础讲起 ...

  2. SpringMVC基础入门,创建一个HelloWorld程序

    ref:http://www.admin10000.com/document/6436.html 一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要 ...

  3. OpenVAS漏洞扫描基础教程之创建用户

    OpenVAS漏洞扫描基础教程之创建用户 OpenVAS管理服务 默认情况下,OpenVAS服务仅创建了一个名为admin的用户,而且是管理员用户(拥有最高的权限).如果想要其它客户端登陆的话,不可能 ...

  4. OpenVAS漏洞扫描基础教程之创建用户组与创建角色

    OpenVAS漏洞扫描基础教程之创建用户组与创建角色 OpenVAS创建用户组 用户组就是指许多个用户的组合.在网络中,各个访问网络的用户的权限可能各不相同.所以,可以通过将具体相同权限的用户划为一组 ...

  5. WCF系列教程之初识WCF

    本随笔参考自WCF编程系列(一)初识WCF,纯属读书笔记,加深记忆. 1.简介:Windows Communication Foundation(WCF)是微软为构建面向服务的应用程序所提供的统一编程 ...

  6. [SharePoint 2013 入门教程 2 ] 创建WEB应用程序,网站集,网站

    SharePoint 2013 的 Hello World 由大到小  创建WEB应用程序(老母),网站集(儿子),网站(孙子) 直接确定,其余都默认 填入标题,选好模板.网站集 儿子就有了. 点击页 ...

  7. WCF基础教程之开篇:创建、测试和调用WCF

    一转眼,又半个月没有更新博客了.说实话,最近确实是有点忙.不过即使再忙忙,也要抽空来学习一些东西.最近用WCF比较多,就来跟大家分享一下关于WCF的知识吧!为了让大家都能看懂,照顾一些没有学过WCF的 ...

  8. WCF入门教程2——创建第一个WCF程序

    本节目标 掌握接口 理解契约式编程 创建宿主程序 创建客户端程序访问服务 什么是接口 认识一下接口 必须知道的接口特性 接口不可以被实例化(常作为类型使用) 实现类必须实现接口的所有方法(抽象类除外) ...

  9. 纯手写wcf代码,wcf入门,wcf基础教程

    1.定义服务协定     =>定义接口 using System.ServiceModel; namespace WcfConsole { /// <summary> /// 定义服 ...

随机推荐

  1. javacript总结

    前端js总结 //getElementById函数 function $(id){ return document.getElementById(id); } //随机函数不包max //Math.f ...

  2. JS操作小数运算,结果莫名其妙出现多位小数问题

    Number类型: Number类型是ECMAScript中最常用和最令人关注的类型了:这种类型使用IEEE754格式来表示整数和浮点数值(浮点数值在某些语言中也被成为双精度数值),为支持各种数据类型 ...

  3. linux下的udev是干嘛的,能否说的通俗点

    转:http://www.360doc.com/content/11/0415/21/1317564_109924863.shtml 早期的linux的/dev目录下有一大堆设备文件,不管你的主机上是 ...

  4. python接口自动化21-规范的API接口文档示例

    前言 接口文档到底长啥样?做接口测试最大的障碍在于没有接口文档,很多公司不注重接口文档的编写,导致测试小伙伴没见过接口文档. 运气好一点的测试小伙伴可能厚着脸皮找开发要过接口文档,然而拿过来的接口文档 ...

  5. Lua学习之类型与值

    Lua是一种动态语言,在语言中没有类型定义的语法. 在lua中有8中基本的类型: 1.nil(空) 2.boolean 3.number(数字) 4.string(字符串) 5.userdata(自定 ...

  6. 解决kylin报错 ClassCastException org.apache.hadoop.hive.ql.exec.ConditionalTask cannot be cast to org.apache.hadoop.hive.ql.exec.mr.MapRedTask

    方法:去掉参数SET hive.auto.convert.join=true; 从配置文件$KYLIN_HOME/conf/kylin_hive_conf.xml删掉 或 kylin-gui的cube ...

  7. IngressController的session stick问题

    周末爬坑,IngressController恢复因为镜像下载和版本问题折腾一下午,晚上终于折腾出个眉目. 首先,在Kubernetes的service中是可以设置Session Affinity的.例 ...

  8. MLP 之手写数字识别

    0. 前言 前面我们利用 LR 模型实现了手写数字识别,但是效果并不好(不到 93% 的正确率). LR 模型从本质上来说还只是一个线性的分类器,只不过在线性变化之后加入了非线性单调递增 sigmoi ...

  9. Neural Networks for Machine Learning by Geoffrey Hinton (4)

    一种能够学习家谱关系的简单神经网络 血缘一共同拥有12种关系: son, daughter, nephew, niece, father, mother, uncle, aunt, brother, ...

  10. Objective-C:KVO机制

    KVO:key value observer 键值对的观察者   功能:给对象属性添加观察者,用来时时监测对象属性值的改变,一旦属性值发生了改变,观察者就做出相应的反应,提醒用户.在应用中,针对MVC ...