一个新手学习WCF的第一个实例

一、概述

WCF说白了就是一个基于终结点的通信手段!就是Service端提供一定的功能实现,然后暴露出一个或多个终结点,Client端调用Service端的功能(可以理解为调用一个函数),那么Client端是通过何种方式来匹配呢?就是通过匹配Service端暴露出的终结点,既然是匹配,那就说明终结点有一定的属性,这就是我们说的ABC:

A=address(地址)

B=Binding(绑定)

C=Contract(契约)

怎么来让大家更通俗的了解ABC呢?这里我引用园里的一位老师的的一个例子:

有两个城市A、B,假设A市的快递需要去B市领,这里涉及到三个方面的问题:你首先必须知道B的地址(address)对吧,没地址你是根本去不了的,有了地址,那你要怎么去B市,你可以打车去,走路去等等,方式有很多种,但你必须要一交通方式前往B市,这个方式就是Binding,当你到了B市取快递的地方,难道你可以直接把快递拿走吗?显然不行,你必须和快递公司对上货物信息对方才会给你,这个用来匹配的信息就是Contract。

二、一个非常简单的WCF程序

这里我带领大家一步一步来完成这个程序

1、首先我们新建一个空白的解决方案MyWCF(新建项目-》其他项目类型-》Visual Studio解决方案-》空白解决方案)这里我们用的是VS2013

2、 然后右键点击解决方案,添加一个控制台应用程序,命名为Service:

3、右键点击控制台程序Service,添加一个WCF服务,命名为Data

这里将生成Data.cs,IData.cs文件

4、点开IData.cs文件,写一个接口(契约)文件

 1 using System.Collections.Generic;
 2 using System.Linq;
 3 using System.Runtime.Serialization;
 4 using System.ServiceModel;
 5 using System.Text;
 6
 7 namespace Service
 8 {
 9     /// <summary>
10     /// 用ServiceContract来标记此接口是服务契约
11     /// </summary>
12     [ServiceContract]
13     public interface IData
14     {
15         /// <summary>
16         /// 用OperationContract来标记此方法为操作契约
17         /// </summary>
18         [OperationContract]
19         string WCFHello(string name);
20     }
21 }

5、点开Data.cs文件,实现接口,即实现契约

 1 using System.Collections.Generic;
 2 using System.Linq;
 3 using System.Runtime.Serialization;
 4 using System.ServiceModel;
 5 using System.Text;
 6
 7 namespace Service
 8 {
 9     // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的类名“Data”。
10     public class Data : IData
11     {
12         public string WCFHello(string name)
13         {
14             return string.Format("{0},Hello!", name);
15         }
16     }
17 }

运行该程序,一定要记得运行Client端时必须保证Service运行,这时我们打开Web.config文件

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1" />
    </startup>
    <system.serviceModel>
        <behaviors>
            <serviceBehaviors>
                <behavior name="">
                    <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
                    <serviceDebug includeExceptionDetailInFaults="false" />
                </behavior>
            </serviceBehaviors>
        </behaviors>
        <services>
            <service name="Service.Data">
                <endpoint address="" binding="basicHttpBinding" contract="Service.IData">
                    <identity>
                        <dns value="localhost" />
                    </identity>
                </endpoint>
                <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
                <host>
                    <baseAddresses>
                        <add baseAddress="http://localhost:8733/Design_Time_Addresses/Service/Data/" />
                    </baseAddresses>
                </host>
            </service>
        </services>
    </system.serviceModel>
</configuration>
 将下划线的这个地址复制,因为在Client端需要 6、打开Program.cs文件,在这里因为你要使用ServiceHost类,则必须引用其命名空间using System.ServiceModel(添加引用的方法:右键点击“引用”-》添加引用-》框架-》System.ServiceModel-》确定,当ServiceHost显示错误时,把光标放在上面当显示using细节时直接添加    关于ServiceHost类的详细信息可以访问微软https://msdn.microsoft.com/zh-cn/library/system.servicemodel.servicehost.aspx
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.ServiceModel;
 5 using System.Text;
 6 using System.Threading.Tasks;
 7
 8 namespace Service
 9 {
10     class Program
11     {
12         static void Main(string[] args)
13         {
14             //定义一个ServiceHost类实例,ServiceHost类提供服务的主机
15             //注意参数中要使用契约实现类而不是接口,注意!!!!
16             using (ServiceHost host=new ServiceHost (typeof (Service.Data )))
17             {
18                 host.Open();
19                 Console.WriteLine("Service Running...");
20                 Console.ReadKey();
21                 host.Close();
22             }
23         }
24     }
25 }

运行该程序,生成.exe文件,不用关闭

7、接下来就是创建Client端,新建一个控制台应用程序(不是在之前的解决方案下,而是另外建一个),命名为Client

首先必须先添加服务引用(右键“引用”-》添加服务引用-》输入之前复制的address,并修改命名空间为HelloWCF(命名随意),如图

 这个时候我们可以打开App.config看看:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1" />
    </startup>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_IData" />
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://localhost:8733/Design_Time_Addresses/Service/Data/"
                binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IData"
                contract="HelloWCF.IData" name="BasicHttpBinding_IData" />
        </client>
    </system.serviceModel>
</configuration>

打开Program.cs,添加引用using System.ServiceModel和using System.ServiceModel.Channels,方法和之前的一样

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.ServiceModel;
 5 using System.ServiceModel.Channels;
 6 using System.Text;
 7 using System.Threading.Tasks;
 8
 9 namespace Client
10 {
11     class Program
12     {
13         static void Main(string[] args)
14         {
15             //这里的"BasicHttpBinding_IData"正是我们之前打开的App.config里的name="BasicHttpBinding_IData"
16             //ChannelFactory的类型也是contract="HelloWCF.IData"
17             var proxy = new ChannelFactory<HelloWCF.IData>("BasicHttpBinding_IData").CreateChannel();
18             Console.WriteLine(proxy.WCFHello("Tom"));
19             ((IChannel)proxy).Close();
20         }
21     }
22 }
运行即可,查看运行结果:

这样一个简单的WCF入门程序就完成了!因为这是我的第一篇,因为我的水平有限,不足之处还望指出,谢谢!!!!
时间: 2024-08-29 21:30:32

一个新手学习WCF的第一个实例的相关文章

搭建一个新手学习AI/ML的Python环境

不知不觉消失了好久,公众号也很久没有更新了.因为跑去学习微软AI方向的MPP课程了.MPP是目前微软最先提供关于AI的培训课程,关于MPP的学习体系,我后面会再写一篇简单的介绍. ???? MPP包含了很多的内容,开始学习的时候速度还挺快,到后面越来越艰涩.这也是很久没有精力去更新内容的原因之一.在学习的过程中,逐步接触到了AI或者ML所需要的Python环境.还记得我们之前的介绍吗?通过Python去调用AI的很多API,来快速实现AI的一些功能. ??? 在学习Azure AI的API的eD

爬虫新手学习2-爬虫进阶(urllib和urllib2 的区别、url转码、爬虫GET提交实例、批量爬取贴吧数据、fidder软件安装、有道翻译POST实例、豆瓣ajax数据获取)

爬虫新手学习1-爬虫基础 1.urllib和urllib2区别实例 urllib和urllib2都是接受URL请求相关模块,但是提供了不同的功能,两个最显著的不同如下: urllib可以接受URL,不能创建设置headers的Request类实例,urlib2可以. url转码 https://www.baidu.com/s?wd=%E5%AD%A6%E7%A5%9E python字符集解码加码过程: 2.爬虫GET提交实例 #coding:utf-8 import urllib #负责url编

第一节 构建一个简单的WCF应用

先吐个槽,到目前为止接触的东西也就是些ado.net.select.delete.update.create.临时表的批量操作.及稍微复杂点的几个表之间查询再带几个excel导入导出 然后会点前端的js.jquery等,所以在公司目前薪水并不高(能在广州生活下去吧,什么买车买房的想都别想),拿自己身边的同志一比较感觉心里不怎么平衡,凡事还是得靠自己 自强才是硬道理,就吐到这里吧!开始我的wcf之旅吧 本人理工科类型的文笔很烂 希望各位大神不要喷小弟哦(参照的书本:WCF全面解析) 咱们还是从小学

WCF学习——构建一个简单的WCF应用(一)

本文的WCF服务应用功能很简单,却涵盖了一个完整WCF应用的基本结构.希望本文能对那些准备开始学习WCF的初学者提供一些帮助. 在这个例子中,我们将实现一个简单的计算器和传统的分布式通信框架一样,WCF本质上提供一个跨进程.跨机器.跨网络的服务调用.在本例中,客户端和WCF应用服务通过运行在同一台机器上的不同进程模拟. 步骤一.构建整个解决方案 1.创建一个空白的解决方案 2.添加四个项目和引用及关系  Service.Interface  用于定义服务契约的类库项目,引用WCF核心程序集Sys

分享一个源码下载网站,天气预报项目源码,比较适合新手学习

本项目是一个天气预报项目源码,可以设置城市.可以更换应用内背景图片.自带天气widget小组件等,天气信息由m.weather.com.cn提供.比较适合新手学习和参考.项目编译版本4.2.2默认编码UTF-8源码有大量中文注释. 上链接:http://www.devstore.cn/code/info/104.html,需要的拿去. 天气预报项目相关服务--推送服务的选择,市场上的推送服务有百度云,个推,极光,友盟,小米,Bmob,智游等等,在如此多的推送服务里面你的项目该集合哪个推送服务呢,

新手学习 React 迷惑的点

网上各种言论说 React 上手比 Vue 难,可能难就难不能深刻理解 JSX,或者对 ES6 的一些特性理解得不够深刻,导致觉得有些点难以理解,然后说 React 比较难上手,还反人类啥的,所以我打算写两篇文章来讲新手学习 React 的时候容易迷惑的点写出来,如果你还以其他的对于学习 React 很迷惑的点,可以在留言区里给我留言. 为什么要引入 React 在写 React 的时候,你可能会写类似这样的代码: import React from 'react' function A() {

学习面向对象的第一天,感觉还好啦

今天是在云和学院学习面向对象的第一天,发现程序的写法可以有好多种,但是简单的还是要自己学习,其实都很想用简单的方法,但是还是需要面向对象这个理解的更加明白,或许我真的在这方面只是知道这个名词但是还真的不知道这个怎么整,今天就初步的写下我学习的面向对象的一些基本的知识. <1>首先讲述了类与对象的区别以及类的定义与对象的定义,虽然学习类与对象很抽象,但是我认为首先是自己能够理解类与对象的定义,从定义上在去区别类与定义,这样可能会简单些吧. 类的定义:把具有相同性质和功能的事物所构成的集合就叫做类

Java深度历险(一) Jboss+EJB的第一个实例

学习感悟:每次学习新的知识,都会通过第一个小的实例入手,获得成就感,经典的Hello Workd实例奠定了我们成功的大门哈,这些经典的实例虽小但是五脏俱全呢,很好的理解了,Ejb的核心. 今天主要以这个小实例,来学习EJB的分布式,我们可以将接口与实现放到一台计算机上,而客户端可以放到另一台机器上,当然分布式的意思很大了(下篇博客给大家讲解),快来看实例. 一:代码实现 1:定义接口 <span style="font-size:18px;"><span style=

Java闭关修炼64课 很适合新手学习的JAVA视频教程

Java闭关修炼64课 很适合新手学习的JAVA视频教程 java闭关修炼第一课 什么是java(1).rar  java闭关修炼第一课 什么是java.rar  java闭关修炼第七课 基础语言要素(1).rar  java闭关修炼第七课 基础语言要素.rar  java闭关修炼第三十一课 静态方法(1).rar  java闭关修炼第三十一课 静态方法.rar  java闭关修炼第三十七课 成员初始化顺序讨论(1).rar  java闭关修炼第三十七课 成员初始化顺序讨论.rar  java闭