转载地址:

http://www.cnblogs.com/xblues/archive/2008/07/11/1240843.html

看了园子里很多学习WCF的例子,感觉受益匪浅,但是由于每个人学习的侧重点不同,一些很详细的细节例如每一个属性都是用来干什么的,建立不同的项目类型对创建的服务有什么区别等等,都不得而知。终于,在MSDN上发现了一篇入门教程。讲解的十分基本,十分详细,想进到每一个细节,然我彻底了解入门的每一个细节,整个教程结构清晰,代码简洁,讲解细致,值得推荐。

地址: http://msdn.microsoft.com/en-us/library/ms734712.aspx

做这分5部来讲解创建一个最基本的基于B/S构架的WCF应用。服务是根据输入的两个数字,返回这两个数字的加减乘除运算结果。

第一步:定义WCF服务契约(创建项目,加入引用,定义Interface)
第二部:引入WCF服务契约(添加具体服务函数)
第三部:构架WCF服务,运行WCF服务(添加Uri,定义服务对象地址,运行服务)
第四部:利用工具访问服务,自动生成WCF服务代理的代码文件
第五部:配置一个简单的WCF客户端(用客户端引入服务代理,通过服务代理来访问服务)
第六部:运行程序

How to: Define a Windows Communication Foundation Service Contract
How to: Implement a Windows Communication Foundation Service Contract
How to: Host and Run a Basic Windows Communication Foundation Service
How to: Create a Windows Communication Foundation Client
How to: Configure a Basic Windows Communication Foundation Client
How to: Use a Windows Communication Foundation Client

先建立一个解决方案。
在这个解决方案下面建立一个叫做Server的控制台应用项目,再建立一个叫做Client的控制台应用项目。
分别给每一个项目添加引用到System.ServiceModel
编辑每个项目下面的Program.cs

客户端Program.cs代码
 1using System;
 2using System.Collections.Generic;
 3using System.Text;
 4using System.ServiceModel;
 5
 6namespace ServiceModelSamples
 7{
 8
 9    class Client
10    {
11        static void Main()
12        {
13            //Step 1: Create an endpoint address and an instance of the WCF Client.
14            EndpointAddress epAddress = new EndpointAddress("http://localhost:8000/ServiceModelSamples/Service/CalculatorService");
15            CalculatorClient client = new CalculatorClient(new WSHttpBinding(), epAddress);
16
17
18            // Step 2: Call the service operations.
19            // Call the Add service operation.
20            double value1 = 100.00D;
21            double value2 = 15.99D;
22            double result = client.Add(value1, value2);
23            Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);
24
25            // Call the Subtract service operation.
26            value1 = 145.00D;
27            value2 = 76.54D;
28            result = client.Subtract(value1, value2);
29            Console.WriteLine("Subtract({0},{1}) = {2}", value1, value2, result);
30
31            // Call the Multiply service operation.
32            value1 = 9.00D;
33            value2 = 81.25D;
34            result = client.Multiply(value1, value2);
35            Console.WriteLine("Multiply({0},{1}) = {2}", value1, value2, result);
36
37            // Call the Divide service operation.
38            value1 = 22.00D;
39            value2 = 7.00D;
40            result = client.Divide(value1, value2);
41            Console.WriteLine("Divide({0},{1}) = {2}", value1, value2, result);
42
43            //Step 3: Closing the client gracefully closes the connection and cleans up resources.
44            client.Close();
45
46            Console.WriteLine();
47            Console.WriteLine("Press <ENTER> to terminate client.");
48            Console.ReadLine();
49
50
51        }
52    }
53}
54

服务端创建好了以后,就可以试运行了。
这时候可以用微软提供的命令行工具访问这个服务,生成服务代理 app.config 和 generatedProxy.cs两个文件。

svcutil.exe /language:cs /out:generatedProxy.cs /config:app.config
http://localhost:8000/ServiceModelSamples/service

把这两个文件添加到客户端项目里去。
现在就可以编辑客户端代码了。

服务端Program.cs代码
  1using System;
  2using System.ServiceModel;
  3using System.ServiceModel.Description;
  4
  5namespace Microsoft.ServiceModel.Samples
  6{
  7    // Define a service contract.
  8    [ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples")]
  9    public interface ICalculator
 10    {
 11        [OperationContract]
 12        double Add(double n1, double n2);
 13        [OperationContract]
 14        double Subtract(double n1, double n2);
 15        [OperationContract]
 16        double Multiply(double n1, double n2);
 17        [OperationContract]
 18        double Divide(double n1, double n2);
 19    }
 20
 21    // Service class that implements the service contract.
 22    // Added code to write output to the console window.
 23    public class CalculatorService : ICalculator
 24    {
 25        public double Add(double n1, double n2)
 26        {
 27            double result = n1 + n2;
 28            Console.WriteLine("Received Add({0},{1})", n1, n2);
 29            Console.WriteLine("Return: {0}", result);
 30            return result;
 31        }
 32
 33        public double Subtract(double n1, double n2)
 34        {
 35            double result = n1 - n2;
 36            Console.WriteLine("Received Subtract({0},{1})", n1, n2);
 37            Console.WriteLine("Return: {0}", result);
 38            return result;
 39        }
 40
 41        public double Multiply(double n1, double n2)
 42        {
 43            double result = n1 * n2;
 44            Console.WriteLine("Received Multiply({0},{1})", n1, n2);
 45            Console.WriteLine("Return: {0}", result);
 46            return result;
 47        }
 48
 49        public double Divide(double n1, double n2)
 50        {
 51            double result = n1 / n2;
 52            Console.WriteLine("Received Divide({0},{1})", n1, n2);
 53            Console.WriteLine("Return: {0}", result);
 54            return result;
 55        }
 56    }
 57
 58
 59    class Program
 60    {
 61        static void Main(string[] args)
 62        {
 63
 64            // Step 1 of the address configuration procedure: Create a URI to serve as the base address.
 65            Uri baseAddress = new Uri("http://localhost:8000/ServiceModelSamples/Service");
 66
 67            // Step 1 of the hosting procedure: Create ServiceHost
 68            ServiceHost selfHost = new ServiceHost(typeof(CalculatorService), baseAddress);
 69            try
 70            {
 71
 72
 73                // Step 3 of the hosting procedure: Add a service endpoint.
 74                selfHost.AddServiceEndpoint(
 75                    typeof(ICalculator),
 76                    new WSHttpBinding(),
 77                    "CalculatorService");
 78
 79
 80                // Step 4 of the hosting procedure: Enable metadata exchange.
 81                ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
 82                smb.HttpGetEnabled = true;
 83                selfHost.Description.Behaviors.Add(smb);
 84
 85                // Step 5 of the hosting procedure: Start (and then stop) the service.
 86                selfHost.Open();
 87                Console.WriteLine("The service is ready.");
 88                Console.WriteLine("Press <ENTER> to terminate service.");
 89                Console.WriteLine();
 90                Console.ReadLine();
 91
 92                // Close the ServiceHostBase to shutdown the service.
 93                selfHost.Close();
 94            }
 95            catch (CommunicationException ce)
 96            {
 97                Console.WriteLine("An exception occurred: {0}", ce.Message);
 98                selfHost.Abort();
 99            }
100        }
101    }
102}
103

每一个细节都包含在上面的这两个Program.cs文件中了,你大概看一下就会懂。比院子里大多数教材说得都清晰,特别适合像我一样爱刨根问底的初学者。:)
最后编译程序,试运行。(两个都是命令行程序,直接到那个编译好的目录里去找那个exe文件运行,先运行服务,再运行客户端)。

转载于:https://www.cnblogs.com/OceanChen/archive/2009/03/03/1402273.html

【转载】MSDN上发现了一篇很好的WCF入门教程相关推荐

  1. python很全的爬虫入门教程

    python很全的爬虫入门教程 一.爬虫前的准备工作 首先,我们要知道什么是爬虫 1.什么是网络爬虫? 网络爬虫是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁 ...

  2. 分享一篇价值不错的Python入门教程

    这是一篇简短的关于python程序设计语言的入门教程,原文在这里,翻着词典翻译了来! 这是一份对编程艺术的简短介绍,其中的例子是用python写成的.(如果你已经知道了该如何编程,但是想简单了解一下p ...

  3. 一篇实用的Latex的入门教程

    转载 LaTeX新人教程,一小时从完全陌生到基本入门 作者 : 董楠 LaTeX新人教程,一小时从完全陌生到基本入门 by Nan 对于真心渴望迅速上手LaTeX的人,可以只看正文. 曾经在缝缝补补中 ...

  4. python教程很详细_Python编程入门教程:从入门到高级,非常详细

    本文的资料和内容是我下载的,觉得非常有用,于是转过来大家瞧瞧: 这里给初学Python的朋友提供一些建议和指导吧.大神请无视, 俗话说:授人以鱼不如授人以渔.所以我这里只是阐述学习过程,并不会直接详细 ...

  5. 转载:磁盘分区,一篇很好的文章

    磁盘分区长期以来一直是个人计算机领域中的一项基本必备知识.然而,由于越来越多的人开始购买带有预安装的操作系统的计算机,相对来说,只有极少人理解分区的原理.本章试图解释分区的原因以及用法,从而使你能够尽 ...

  6. 一篇很好的Hadoop入门文章:Hadoop是什么、核心HDFS与MapReduce的原理

    Hadoop一直是我想学习的技术,正巧最近项目组要做电子商城,我就开始研究Hadoop,虽然最后鉴定Hadoop不适用我们的项目,但是我会继续研究下去,技多不压身. <Hadoop基础教程> ...

  7. 分享一篇很不错的CMake入门文章,值得收藏细读!

    https://www.hahack.com/codes/cmake/ ▌什么是 CMake? 你或许听过好几种 Make 工具,例如 GNU Make ,QT 的 qmake ,微软的 MS nma ...

  8. 一篇很好的EDP入门介绍文章——了解AUX,PSR,ASSR 以及EDP版本的差异

    嵌入式DisplayPort(eDP)系视讯电子标准协会(VESA)针对行动装置应用,所制定的新一代面板介面,其不仅传输率更胜传统的低电压差动讯号(LVDS)介面,最新1.4版规格更加入许多降低系统功 ...

  9. 【工具篇】接口测试神器 -- Postman 入门教程

    一.Postman概述 (1)工具介绍 Postman是一个接口测试工具,一款非常流行的API调试工具.在做接口测试的时候,Postman相当于一个客户端,它可以模拟用户发起的各类HTTP请求,将请求 ...

  10. 杨洋python课程提高篇_全民一起玩Python 基础篇+提高篇,杨洋老师Python入门教程...

    01第零回:莫叹琐事催白发,且学Python省年华.mp4 02第一回:梧桐长成鸾凤至,环境搭好代码来.mp4 03第二回:算术符号遵循惯例,版本差异务必当心.mp4 04第三回:单条语句独占单行代码 ...

最新文章

  1. KubeCon 北美前瞻|在 2020 最后,容器领域有哪些值得你关注的话题?
  2. 玩转oracle 11g(4):连接,文件操作,交互命令
  3. selenium+linux+python,Linux下Python+selenium自动化环境搭建
  4. Exchange邮件系统日志查看及管理
  5. R语言 神经网络与深度学习(二)
  6. 【南邮操作系统实验】页面置换算法 (FIFO、LRU、OPT)Java 版
  7. 伯克利区块链课程:替代密码验证,比特币应用数字签名的进化之路
  8. 以下不属于计算机综合处理多媒体信息的有,国家开放大学《多媒体应用技术基础》第一-二次形成性考核任务试题...
  9. Python:学习笔记(一)
  10. 如何修改Excel2016默认的等线字体--亲测可用
  11. 360浏览器Linux版内核,360浏览器推出Linux版下载,主要特性解说
  12. 如何写出如散文般的代码――《代码整洁之道》读书笔记(Ch1-Ch3)
  13. 【python】如何批量修改文件名
  14. 前端工程师的 caniuse
  15. 刚刚搬进公寓,应该每个月交100块网费好还是买个随身WiFi?
  16. 什么是 CSDN ?
  17. Flutter使用Provider
  18. 为什么黑客不攻击支付宝?
  19. 计算机在石油工程中应用文献综述,石油与天然气工程领域工程硕士专业学位基本要求第一部分概况.PDF...
  20. 斯坦福大学机器学习笔记(2)逻辑回归

热门文章

  1. 小D课堂 - 零基础入门SpringBoot2.X到实战_第2节 SpringBoot接口Http协议开发实战_7、开发必备工具PostMan接口工具介绍和使用...
  2. 阶段3 3.SpringMVC·_06.异常处理及拦截器_3 SpringMVC异常处理之异常处理代码编写
  3. 今天来聊Java ClassLoader
  4. php foreach、while性能比较
  5. HTML 第5章 Div+CSS布局技术
  6. Struts2.0中ActionInvocation使用
  7. Extjs Ext.net中的常用属性
  8. 处理了与日期相关的一些函数
  9. 五、String字符串常用方法
  10. Mybatis中的DataSource配置