一、WCF是什么

WCF是微软为了实现各个开发平台之间的无疑缝连接而开发一种崭新工具,它是为分布式处理而开发。WCF将DCOM、Remoting、Web Service、WSE、MSMQ、AJAX服务、TCP开发集成在一起,从而降低了分布式系统开发者的学习曲线,并统一了开发标准。

二、WCF的优点

第一,开发的统一性。WCF是对于ASMX, Remoting,Enterprise Service,WSE,MSMQ,TCP开发等技术的整合。WCF是由托管代码编写,无论你是使用TCP通讯,Rmoting通讯还是Web Service ,我们都可以使用统一的模式进行开发,利用WCF来创建面向服务的应用程序。

第二,WCF能够实现多方互操作。它是使用 SOAP通信机制,这就保证了系统之间的互操作性,即使是运行不同开发语言,也可以跨进程、跨机器甚至于跨平台的通信。例如:使用J2EE的服务器(如WebSphere,WebLogic),应用程序可以在Windows操作系统进行调用,也可以运行在其他的 操作系统,如Sun Solaris,HP Unix,Linux等等。

第三,提供高效的安全与可信赖度,它可以使用不同的安全认证将WS-Security,WS-Trust和WS-SecureConversation等添加到SOAP消息中。在SOAP的header中增加了WS-ReliableMessaging允许 可信赖的端对端通信。而建立在WS-Coordination和WS-AtomicTransaction之上的基于SOAP格式交换的信息,则支持两阶段的事务提交(two-phase commit transactions)。

第四,WCF支持多支消息交换模式,如请求-应答,单工,双工等等。另外WCF还支持对等网——利用啮合网络址,客户端能在没有中心控制的情况下找到彼此并实现相互通信。
总括来说,WCF是实现SOA的的一个优秀选择,利用WCF能够实现跨平台,跨语言的无缝连接,从而实现Web服务的相互调用。
 
三、简单开发实例

在WCF里,各个Application之间的通信是由EndPoint来实现的,EndPoint是WCF实现通信的核心要素。一个WCF Service可由多个EndPoint集合组成,每个EndPoint只能有一种绑定,就是说EndPoint就是通信的入口,客户端和服务端通过 EndPoint交换信息。

< service name = " " > 
         < endpoint address = ""  binding = " wsHttpBinding "  contract = " myNamespace.IService " > 
         </ endpoint >

</service>

Endpoint由三部分组成:(A) Address 地址,(B)Binding 绑定,(C)Contract 契约。

  • A(Address): 通过一个URI唯一地标识一个Endpoint,并告诉WCF service的调用者如何找到这个Endpoint。
  • B(Binding): 定义了与数据传输相关的传输协议,消息编码,通信模式,可靠性,安全性,事务,互操作性等信息。Framewrok3.5里已经包括以下几种绑定:

  • C(Contract):它是有关服务响应的操作及进出消息的格式的语法描述,系统就是通过Contract实现操作的。

下面为大家讲解一下Hello World的开发例子

服务器端:

 using  System;
using System.ServiceModel;
namespace myNamespace
{ //在服务器端定义在一个服务契约 [ServiceContract(Namespace = " myNamespace " )]
public interface IService
{
[OperationContract]
String HelloWorld();
} //实现契约 public class MyService:IService { public String HelloWorld(string name) { return "Hello World"+Name; } } }

服务既可以在代码中实现,也可以在配置文件中实现

<services>
<service behaviorConfiguration="ServiceBehavior" name="Service"> //行为可以影响运行是操作的WCF类,它不公在客户端和服务器启动WCF运行时被执行,还可以在二者之间流动消息时被执行。
<endpoint address="" binding="wsHttpBinding" contract="IService">
<identity>
<dns value="localhost" />
</identity>
</endpoint> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> //mexHttpBinding定义了WCF的元数据。当没有定义元数据时,服务依然能够执行,但不能在HTTP中被发现。
</service>
</services> <behaviors>
<serviceBehaviors>
<behavior name="ServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>

客户端:

通过Add Service Reference引用服务地址

添加配置文件:

<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="wsHttpBinding_IService" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="" maxBufferPoolSize="" maxReceivedMessageSize="" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
<readerQuotas maxDepth="" maxStringContentLength="" maxArrayLength=""
maxBytesPerRead="" maxNameTableCharCount="" />
<security mode="None"> <transport clientCredentialType="None" proxyCredentialType="None" realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost/myNamespace.IService.svc" binding="wsHttpBinding" bindingConfiguration="wsHttpBinding_IService" contract="myNamespace.IService" name="wsHttpBinding_IService" />
</client>
</system.serviceModel>

最后通过代理直接调用

static void Main(string[] args)
{
ServiceClient client=new ServiceClient();
string data=client.HelloWorld("Leslie");
Console.Writeline(data);
Console.Read();
}

原文地址:http://www.cnblogs.com/leslies2/archive/2011/01/26/1934163.html

WCF揭秘(一)——简单的WCF开发实例的更多相关文章

  1. Hibernate入门2.简单的项目开发实例

    Hibernate入门2.简单的项目开发实例 这一节通过一个简单的项目学习Hibernate项目的配置 代码下载 : 链接: http://pan.baidu.com/s/1zlgjl 密码: p34 ...

  2. [WCF REST] 一个简单的REST服务实例

    Get:http://www.cnblogs.com/artech/archive/2012/02/04/wcf-rest-sample.html [01] 一个简单的REST服务实例 [02] We ...

  3. 1.WCF学习--创建简单的WCF服务

    一.基本了解WCF 1.面向服务代表的是一种设计理念,和面向对象.面向组件一样,体现的是一种对关注点进行分解的思想,面向服务是和技术无关的 2.WCF需要依存一个运行着的宿主进程,服务寄宿就是为服务指 ...

  4. C#之WCF入门1—简单的wcf例子

    第一步:创建一个空的解决方案,新建一个WCF服务应用程序项目(使用默认名字) 来模拟服务端,新建一个控制台应用程序项目(名称改为 ConsoleApp)来模拟客户端. 第二步:简单分析WcfServi ...

  5. 【WCF 2】理解WCF框架的简单小实例

    导读:上篇博客介绍了WCF框架的整体情况,然后,闲着没事儿,自己做了一个及其简单的WCF框架的例子帮助自己理解.从简单的入手,一步一步深入!本篇博客是介绍怎么用VS2012从头创建一个WCF项目,是一 ...

  6. WCF揭秘学习笔记(1):基础知识

    最近找工作,面试时经常被问懂不懂WCF.不少招聘高级.NET工程师的要求上都 写着有WCF开发经验的优先考虑.我对于WCF仅仅是通过看一些教学视频这种山寨学习法了解一些.现在要下决心好好学习一下WCF ...

  7. C# -- HttpWebRequest 和 HttpWebResponse 的使用 C#编写扫雷游戏 使用IIS调试ASP.NET网站程序 WCF入门教程 ASP.Net Core开发(踩坑)指南 ASP.Net Core Razor+AdminLTE 小试牛刀 webservice创建、部署和调用 .net接收post请求并把数据转为字典格式

    C# -- HttpWebRequest 和 HttpWebResponse 的使用 C# -- HttpWebRequest 和 HttpWebResponse 的使用 结合使用HttpWebReq ...

  8. VS自带WCF测试客户端简单介绍

    在目前的二次开发项目中,一些信息是放在客户那里的,只给你一个服务地址,不知道具体有什么方法,每次想调用一个服务不知道能不能实现目前的需求,只能测试.写个测试程序真的划不来,占用时间不说,而且你忙了一上 ...

  9. WCF/WPF公司内部订餐程序开发

    WCF/WPF公司内部订餐程序开发 (服务端篇) 上班的第一天,群里讨论关于订餐的问题,所以想到了要不要自己开发一个公司内部的订餐系统呢?方便公司内部员工的订餐,有了想法就简单的实践了下 . 实现还是 ...

随机推荐

  1. C#不同页面之间通信的方法

    以前做项目的时候经常头疼两个页面之间的交互(汗),这几天看的MVVM项目,忽然感觉好简单的!我自己写了个简单的demo 可以简单实现2个页面之间的交互,新人第一次发博客,不喜勿喷 代码很简单,注释我就 ...

  2. 【Web学习日记】——C#引用WebService,从配置文件改变引用地址

    开发环境:Win7 32位,开发工具:VS2013,.Net:4.0 初用WebService,很多地方都搞不清楚怎么回事,但稍作研究之后,也就用上了,根本就没有考虑后续事情. 但是,随着项目的进行, ...

  3. MYSQL创建多张表,相同表结构,不同表名

    #!/bin/bashfor i in {0..63}domysql -u$1 -p$2 -h127.0.0.1 <<EOFuse yoon;create table ivc_pre_de ...

  4. Eclipse下jad反编译之“类文件查看器”不能处理给定的输入错误解决

    Eclipse中的插件下载,安装和配置可以参考我的另一篇文章:MyEclipse反编译Class文件 下面重点讲解如何使用jad反编译 1.在DOS窗口中,到class所在目录,直接运行 >ja ...

  5. 为iOS7重新设计你的App

    在 WWDC 上看到 iOS 7 系统的发布后,我们重新审视了自己的应用 Grocery List,并且意识到:iOS 7 对于开发者来说是一个全新的开始,就像七年前 iPhone 首次发布一样.现在 ...

  6. Nginx开启gzip压缩功能

    在Nginx安装完成之后,我们可以开启Gzip压缩功能,这里Nginx默认只能对text/html类型的文件进行压缩.下面的指令为开启Gzip的指令: gzip on; gzip_http_versi ...

  7. iOS优化内存方法推荐

    1. 用ARC管理内存 ARC(Automatic ReferenceCounting, 自动引用计数)和iOS5一起发布,它避免了最常见的也就是经常是由于我们忘记释放内存所造成的内存泄露.它自动为你 ...

  8. Could not find file '..\bin\hibernate.cfg.xml'解决方法:

    web.config: 解决方法:

  9. WPF解析Word为图片

    偶遇需要解析Word为单张图,此做 http://git.oschina.net/jiailiuyan/OfficeDecoder using System; using System.Collect ...

  10. 【笔记】UML核心元素

    1.参与者 定义:在系统之外与系统交互的某人或某物. 特点:1.可以非人:2.与系统直接交互:3.主动发出动作并获得反馈:4.涉众(stakerholder)的代表 具有两个版型: 1.业务主角(bu ...