WCF基础教程——vs2013创建wcf应用程序

简介: WCF基础教程——vs2013创建wcf应用程序

引言


最近在项目中见到了师哥们经常谈到的WCF这方面的知识,当时在敲代码的时候也没有理解wcf到底是个什么东西?


以及我们为什么在项目中会采用这样的框架来实现,只是按照师哥他们写好的代码编写相同格式的代码,随着代码敲的越来越多就慢慢的懂得了怎样实现客户端和服务端的连同,但是wcf真正的运行机制还是一点也不懂,最近在听师


哥们讲课的时候有讲解了一些关于WCF的知识,自己感觉应该好好理解这方面的知识了,并且这个东西在项目中是非常常见的,下面就结合我实现的一个小Demo来和大家分享一下。


其中一些最基本的概念,大家可以参考百度百科关于wcf的介绍,在这里给大家两张图对比一下,能很好的体现出wcf的用途:


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

20150729093128839.jpg

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



20150729093255466.jpg

客户机使用浏览器访问服务器A,服务器A为了业务需要与其他各种应用部署在服务器B、C、D....再通过WCF技术互相通信,相互访问...然而面向服务的好处不仅仅在此,他还提供了不同语言不同操作系统的可交互性..下面我们就开始创建一个客户端和服务端分离的wcf应用程序:


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


20150729094129097.gif



20150729094152747.gif


2、从图中我们可以看出,在我们建立好的解决方案中有默认的两个service.svc和Iservice.cs文件,我们可以将这两 个文件删除,然后添加我们自己的wcf服务,步骤如图:


20150729094731174.gif


20150729094930831.gif


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 测试客户端以测试此服务,请在解决方案资源管理器中选择 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设为起始页后运行。

20150729104437334.gif


这样我们的wcf服务端基本上就可以用了,剩下的就是将这个服务端发布然后部署到IIS上,就可以供客户端使用了,在这我就不给大家详解怎样在IIS上发布wcf,我们就使用一个简单的办法就是直接预览user.svc,如图:


20150729111630626.gif

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


下面来看我们客户端的创建


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


20150729112025703.gif


2、下面我们需要添加一个服务引用如图,填写好地址后点击转到按钮,然后点击确定

20150729112554213.gif

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



20150729112753179.gif

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为我们客户端的命名空间,ServiceReference为我们在添加服务引用的时候,需要我们记住的那个名称。


2 UserClient user = new UserClient();UserClient就是我们在添加引用的时候生成的服务端User类的客户端代理类,一般客户端的代理类名称都会是***Client。其中User就是我们服务端添加的那个wcf服务(user.svc)的名称。


到这我们就完成了一个很简单的WCF的小Demo,同时完成了由A服务器的应用小B服务器中WCF提供的方法的调用。


小结


这个小Demo算是我们学习WCF的最基础的入门,在我看来对于刚入门的读者们来说应该是很容易接受的,也算是完成了一个基础的教程,随着对wcf的更深入的学习,我会继续更新此类博客来和大家交流,如果此博客有什么不懂的地方可以留言交流。


目录
相关文章
WCF基础教程(四)——数据契约实现传送自定义数据类型
WCF基础教程(四)——数据契约实现传送自定义数据类型
84 0
|
XML 网络协议 IDE
WCF基础教程(三)——WCF通信过程及配置文件解析
WCF基础教程(三)——WCF通信过程及配置文件解析
294 0
WCF基础教程(三)——WCF通信过程及配置文件解析
|
C++
WCF基础教程(二)——解析iis8和iis8.5+VS2013发布wcf服务问题
WCF基础教程(二)——解析iis8和iis8.5+VS2013发布wcf服务问题
102 0
WCF基础教程(二)——解析iis8和iis8.5+VS2013发布wcf服务问题
|
网络协议 安全 Windows
WCF如何绑定netTcpBinding寄宿到控制台应用程序详解
新建一个WCF服务类库项目,在其中添加两个WCF服务:GameService,PlayerService
WCF如何绑定netTcpBinding寄宿到控制台应用程序详解
|
前端开发 Windows 机器人
wcf 基础教程 第一讲 wcf基础知识
最近工作有点忙,感觉有点累啊,很久没有更新博客了,看到自己的博客访问量日渐下降,我于心不忍,决定还是重新开博来吸引大家的关注。这次要说的不是别的,正是大名鼎鼎的wcf。或者在中间我会穿插MVC的说明,毕竟上一个系列MVC也没有写完就过年了,这次希望能坚持到底。
951 0
wcf 基础教程 第一讲 wcf基础知识 在IIS中承载wcf服务
在上一篇博客wcf 基础教程 第一讲 wcf基础知识中,因为篇幅过长,所以我选择在这一篇把wcf用IIS承载的方式介绍一下。 首先我们在WebHosting web项目中创建一个.svc的文件,这里我建议之间添加一个类,然后把文件后缀改成.svc就可以。
965 0
|
程序员 数据格式 XML
Wcf 基础教程 之 configurationName
可能大家会觉得我说完了wcf的介绍以后,会介绍wcf的契约、服务这些内容,但是我没有,为什么呢?原因就是我一直坚持的从程序员中来,到程序员中去的观点。程序员的学习是一个渐进的过程,不是有了介绍就可以直接了解wcf的全貌,但是我也没有介绍wcf的配置,因为这个内容很多,但是我今天要介绍的是wcf中的一个知识点,这个知识点只是一个渐进的过程,但是知道了这个知识点以后,我们可以避免很多错误的发生。
661 0
|
Windows 数据格式 XML
Wcf 基础教程 服务寄宿之编码实现 ServiceHost
wcf 的服务寄宿方式大致可以分为两种,一种就是自我寄宿,另一种就是通过操作系统的组件进行寄宿。 wcf的服务需要承载于一个被称为宿主的应用程序中。宿主程序为请求监听、消息处理、服务激活、以及操作执行提供了一个运行环境。
838 0