控制台程序以NetTCP方式部署WCF

合集下载

WCF开发实战教程

WCF开发实战教程

WCF开发实战系列教程1:创建第一个WCF服务在这个实战中我们将使用DataContract,ServiceContract来构建WCF服务,并使用VS2008内置的“WCFSVCHost”运行我们创建的WCF服务,并使用“WCF测试客户端”来测试我们创建的服务。

在此WCF服务中我们将建立一个关于Book的服务,并实现对Book的添加、删除和检索操作。

第一步:创建“WCF服务库”“文件(F)”->“新建项目(P)...”打开新建项目对话框。

在左侧的“项目类型”中选择“WCF”,然后再在右侧的“模板”中选择“WCF服务库”。

在下面的“名称”文本框中,填写我们要创建的WCF服务库的项目名称“Services”。

《图1》点击确定,会创建出我们的WCF服务库项目,在解决方案中会自动为我们生成两个类文件“IService.cs”和“Service.cs”。

《图2》这两个类文件是两个WCF示例文件,对我们开发没有什么用处,现在我们删掉这两个文件。

第二步:创建Book实体类在“解决方案窗口”中,我们右击Services项目名,选择“添加”,再单击“类”《图3》在弹出的“添加新项”窗口中,选择“类”,并在“名称”文本框中写入项名称“Book.cs”。

《图4》第三步:为Book实体类编写代码using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Runtime.Serialization;namespace Services{[DataContract]public class Book{[DataMember]public string BookNO;[DataMember]public string BookName;[DataMember]public decimal BookPrice;}}为了保证此类在WCF调用中能够被序列化,我们在Book类上面加入[DataContract]标签,在每个需要序列化的成员变量上加入[DataMember]标签。

wcf证书认证

wcf证书认证

这个项目有几点要记住的。

一开始最好就采用原项目的命名空间或类名。

不要自已改动。

要不然你就删了它。

为什么要用x.509证书?WCF的服务端和客户端之间,如果不作任何安全处理(即服务端的<security mode="None">),则所有传输的消息将以明文方式满天飞,在internet/intranet环境下无疑是很不安全的,这就是用证书的目的。

(当然WCF还有其它安全机制,比如最常见的UserName方式,但通常每次都要从数据库读取用户名/密码信息进行验证,比较麻烦,开销也大,个人觉得还是证书最为方便)--关于x.509证书的基本知识,可参见/yjmyzz/archive/2008/08/19/1271171.html大致原理(个人理解,可能不太准确):正确设置服务端与客户端证书后,WCF的服务端启动时,需要利用服务端证书验证,如果验证通过将正常启动,否则报异常,同时客户端调用服务端方法时,也需要提供客户端证书,服务端接受到客户端证书后,验证客户端证书的有效性,如果通常,则允许客户端正常调用。

下面将逐步讲解如何使用:1.制作证书先进入到vs2008的命令行状态,即:开始-->程序-->Microsoft Visual Studio 2008-->Visual Studio Tools-->Visual Studio 2008 命令提示键入:makecert -r -pe -n "CN=MyServer" -ss My -sky exchange解释一下:makecert.exe是一个专门用来制作证书的小工具,上面一行的意思就是制作一个CN=MyServer的服务器证书,默认存储在CurrentUser\My这个位置,同时这个证书标识为可导出。

(详细的MakeCert参数可参见/zh-cn/bfsktky3(vs.80).aspx)再输入:makecert -r -pe -n "CN=MyClient" -ss My -sky exchange生成客户端证书,证书生成好以后,可以在IE里查看到,IE-->工具-->Internet选项-->内容-->证书同时如何管理已经安装的证书,可参见/yjmyzz/archive/2008/08/20/1272128.html2.wcf服务端2008启动后,新建一个控制台应用程序-->(右击)添加-->新建项-->WCF服务-->命名为MyService.cs-->保存保存后,系统会自动生成一个接口文件IMyService.cs二个文件的内容如下:IMyService.csusing System;using System.ServiceModel;namespace Server{// 注意: 如果更改此处的接口名称 "IMyService",也必须更新 App.config 中对 "IMySer vice" 的引用。

一个完整的WCF服务的发布与测试过程

一个完整的WCF服务的发布与测试过程

使用VS自带的WCFSVCHost(WCF服务主机)发布WCF服务,时刻开发人员测试使用。

下面我们来看一下如何在IIS中部发布一个WCF服务。

环境是VS 2008 (公司电脑没有安装VS2010)^_^我们从头开始,不写代码,完全的配置,会收获不小。

新建一个WCF 服务库建立一个WCF服务应用程序结果如下删除掉WCF程序中不需要的默认文件,如下图为WcfService1项目添加WcfServiceLibrary1的引用,如下图。

修改声明指示内容,让这个Service.svc文件的后台代码指向我们创建的WCF服务库项目--WcfServiceLibrary1项目中的服务类,改后的代码如下:<%@ ServiceHost Language="C#" Debug="true"Service="WcfServiceLibrary1.Service1" %>Ctrl+Shift+B 编译一下解决方案,配置工具用的反射,先编译才行此时我们的WCF服务站点并不能把WCF服务库中的服务和终结点发布出来,还需要我们对web.config进行一系列的配置工作。

右键我们要配置的Web.Config文件,编辑WCF配置在弹出的服务配置窗口中,把Service1服务指定到WCF服务库的WcfServiceLibrary1.dll 中的WcfServiceLibrary1.Service1服务类上。

再把其中的一个对外终结点的Contract设为WCF服务库的WcfServiceLibrary1.dll中的WcfServiceLibrary1.IService1服务契约上。

这一步是可选的,我们再为此WCF服务站点添加一个终结点,配置如下图下面我们将试着使用不同的终结点与WCF服务进行交互,查看运行情况。

当我们使用IIS5或IIS6发布WCF服务的时候一般只创建Http绑定的终结点,而不能创建使用TCP绑定、管道绑定的终结点。

WCF三种Binding

WCF三种Binding

北大青鸟上地软件园:WCF三种Binding转眼wcf技术已经出现很多年了,也在.net界混的风生水起,同时.net也是一个高度封装的框架,作为在wcf食物链最顶端的我们所能做的任务已经简单的不能再简单了,再简单的话马路上的大妈也能写wcf了,好了,wcf最基本的概念我们放在后面慢慢分析,下面我们来看看北大青鸟上地软件园神奇的3个binding如何KO我们实际场景中的80%的业务场景。

一:basicHttpBinding作为入门第一篇,也就不深入谈谈basic中的信道栈中那些啥东西了,你只需要知道有ABC三个要素,注意不是姨妈巾哦,如果需要详细了解,可以观赏我以前的系列。

在这里我就不多说了,太简单的东西没意思,先看个例子简单感受了,你只需知道的是basic走的是http协议就好了,传输消息为soap。

1. 契约1using System.Runtime.Serialization;2using System.ServiceModel;34namespace MyService5 {6 [ServiceContract]7public interface IHomeService8 {9 [OperationContract]10int GetLength(string name);11 }12 }2. 实现类1using System;2using System.Messaging;3using System.Threading;45namespace MyService6 {7public class HomeService : IHomeService8 {9public int GetLength(string name)10 {11return name.Length;12 }13 }14 }3. 服务启动1using System;2using System.ServiceModel;34namespace MyService5 {6class Program7 {8static void Main(string[] args)9 {10using (ServiceHost host = new ServiceHost(typeof(HomeService)))11 {12try13 {14 host.Open();1516 Console.WriteLine("服务开启!"); 1718 Console.Read();19 }20catch (Exception e)21 {22 Console.WriteLine(e.Message);23 }24 }25 }26 }27 }4. 配置config文件<?xml version="1.0" encoding="utf-8" ?><configuration><system.serviceModel><bindings><netTcpBinding><binding name="IHomeServiceBinding"/></netTcpBinding></bindings><behaviors><serviceBehaviors><behavior name=""><serviceMetadata httpGetEnabled="true"/><serviceDebug includeExceptionDetailInFaults="true"/> </behavior></serviceBehaviors></behaviors><services><service name="MyService.HomeService"><endpoint address="http://127.0.0.1:1920/HomeService" binding="basicHttpBinding"contract="MyService.IHomeService"> <identity><dns value="localhost"/></identity></endpoint><endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/><host><baseAddresses><add baseAddress="http://127.0.0.1:1920"/></baseAddresses></host></service></services></system.serviceModel></configuration>5. 然后通过 servicehost 启动服务端using System;using System.ServiceModel;namespace MyService{class Program{static void Main(string[] args){using (ServiceHost host = new ServiceHost(typeof(HomeService))){try{host.Open();Console.WriteLine("服务开启!");Console.Read();}catch (Exception e){Console.WriteLine(e.Message);}}}}}好了,到现在为止,服务端全部开启完毕,北大青鸟上地软件园接下来我们通过“添加服务引用”,来添加对客户端的引用1using System;23namespace ConsoleApplication14 {5class Program6 {7static void Main(string[] args)8 {9 HomeServiceReference.HomeServiceClient client = new HomeServiceReference.HomeServiceClient();1011var s = client.GetLength("12345");1213 Console.WriteLine("长度为:{0}", s);1415 Console.Read();16 }17 }18 }麻蛋,就这么简单,是的,就这样简单的五步,基于http的通信就这样被不小心的完成了,真不好意思。

JAVA与C#平台通信 WCF CXF SOAP

JAVA与C#平台通信 WCF CXF SOAP

问题提出:采用的方案:Java和C#的互操作性,采用基于Soap的通信协议什么是WCF根据微软官方的解释,WCF是使用托管代码建立和运行面向服务(Service Oriented)应用程序的统一框架。

它使得开发者能够建立一个跨平台的、安全、可信赖、事务性的解决方案,且能与已有系统兼容协作。

WCF是微软分布式应用程序开发的集大成者,它整合了.Net平台下所有的和分布式系统有关的技术,例如.Net Remoting、ASMX、WSE和MSMQ。

以通信(Communiation)范围而论,它可以跨进程、跨机器、跨子网、企业网乃至于Internet;以宿主程序而论,可以以,EXE,WPF,Windows Forms,NT Service,COM+作为宿主(Host)。

WCF可以支持的协议包括TCP,HTTP,跨进程以及自定义,安全模式则包括SAML,Kerberos,X509,用户/密码,自定义等多种标准与模式。

/antswallowWCF平台搭建JAVA调用WCFDynamicClientFactory dcf=DynamicClientFactory.newInstance();org.apache.cxf.endpoint.Client client=dcf.createClient("http://localhost:37563/WebSite4/Service.asmx?wsdl"); Object[]reply=client.invoke("HelloWorld",new Object[]{});System.out.println("Server said:"+reply[0].toString());详见:/Apache CXF=Celtix+XFire,Apache CXF的前身叫Apache CeltiXfire,现在已经正式更名为Apache CXF了,以下简称为CXF。

一个WCF使用TCP协议进行通协的例子

一个WCF使用TCP协议进行通协的例子

⼀个WCF使⽤TCP协议进⾏通协的例⼦ 之前写的例⼦都是基于http协议的,但在局域⽹环境下,我希望可以获取更⾼的传输性能和更低的服务端资源占⽤,所以我尝试使⽤TCP协议来进⾏传输。

⽹上的例⼦都讲得⾮常复杂,但终于让我找到⼀个简单的实现⽅法,记录如下:⼀、建⽴WCF服务 ⾸先建⽴⼀个WCF服务库,名称为"WCFService",解决⽅案名称为"WCFDemo",同时"为解决⽅案创建⽬录"要勾上。

确定后VS会⾃动创建⼀个IService1接⼝和Service1程序⽂件,不过由于这个例⼦是演⽰如何使⽤TCP协议的,所以我们就不再作任何修改。

⼆、建⽴宿主程序 在解决⽅案上按右键,选择"添加" -> "新建项⽬",然后新建⼀个Windows 窗体应⽤程序,程序名称为"WCFHost"。

在解决⽅案资源管理器中,需要添加两个引⽤:System.ServiceModel和WCFService。

然后双击窗⼝,在Form_Load事件中编写如下代码: 添加⼀个应⽤程序配置⽂件App.Config,然后粘贴如下内容:<?xml version="1.0" encoding="utf-8" ?><configuration><system.serviceModel><bindings><netTcpBinding><binding name="TcpBinding" closeTimeout="00:01:00" openTimeout="00:01:00"receiveTimeout="00:10:00" sendTimeout="00:01:00" transactionFlow="false"transferMode="Buffered" transactionProtocol="OleTransactions"hostNameComparisonMode="StrongWildcard" listenBacklog="10"maxBufferPoolSize="524288" maxBufferSize="65536" maxConnections="10"maxReceivedMessageSize="65536"><readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"maxBytesPerRead="4096" maxNameTableCharCount="16384" /><reliableSession ordered="true" inactivityTimeout="00:10:00"enabled="false" /><security mode="Transport"><transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" /><message clientCredentialType="Windows" /></binding></netTcpBinding><wsDualHttpBinding><binding name="HttpBinding" closeTimeout="00:01:00" openTimeout="00:01:00"receiveTimeout="00:10:00" sendTimeout="00:01:00" bypassProxyOnLocal="false"transactionFlow="false" hostNameComparisonMode="StrongWildcard"maxBufferPoolSize="524288" maxReceivedMessageSize="65536"messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"><readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"maxBytesPerRead="4096" maxNameTableCharCount="16384" /><reliableSession ordered="true" inactivityTimeout="00:10:00" /><security mode="Message"><message clientCredentialType="Windows" negotiateServiceCredential="true"algorithmSuite="Default" /></security></binding></wsDualHttpBinding></bindings><client><endpoint address="net.tcp://localhost:8000/service" binding="netTcpBinding"bindingConfiguration="TcpBinding" contract="ServiceReference1.IService1"name="TcpBinding"><identity><userPrincipalName value="OverBlue-PC\OverBlue" /></identity></endpoint><endpoint address="http://localhost:8001/service" binding="wsDualHttpBinding"bindingConfiguration="HttpBinding" contract="ServiceReference1.IService1"name="HttpBinding"><identity><userPrincipalName value="OverBlue-PC\OverBlue" /></identity></endpoint></client></system.serviceModel></configuration>对于这个配置⽂件,我是这样理解的:1、baseAddress:由协议、地址和端⼝三个部分组成。

WCF服务以控制台程序为宿主时Silverlight的跨域访问问题

WCF服务以控制台程序为宿主时Silverlight的跨域访问问题

WCF服务以控制台程序为宿主时的跨域访问问题前几天研究SilverLight时碰到了这个问题,本以为很轻松的试验结果很不顺利,查了很多资料才解决了这个问题,在此把解决问题的方法写出来,也方便其它朋友借鉴。

问题是这样产生了,我在测试SilverLight时为了测试与WCF的通讯,创建了一个控制台的应用程序做为WCF服务的宿主程序。

同时创建了一个SilverLight应用程序和一个承载SilverLight的Web程序.解决方案如图:控制台程序:1.添加WCF服务命名为WCFService.cs,并添加服务,代码如下:namespace WCFBase{// 注意: 如果更改此处的类名"WCFService",也必须更新App.config 中对"WCFService" 的引用。

public class WCFService : IWCFService{public int DoWork(int a,int b){return a + b;}public int DoWork2(int a, int b){return a - b;}}}系统会自动添加App.config文件和相关配置节信息内容如下:<?xml version="1.0" encoding="utf-8" ?><configuration><system.serviceModel><serviceHostingEnvironment aspNetCompatibilityEnabled="true"/><behaviors><serviceBehaviors><behavior name="WCFBase.WCFServiceBehavior"> <serviceMetadata httpGetEnabled="true" /><serviceDebug includeExceptionDetailInFaults="false" /></behavior></serviceBehaviors></behaviors><services><servicebehaviorConfiguration="WCFBase.WCFServiceBehavior" name="WCFBase.WCFService"><endpoint address="" binding="basicHttpBinding" contract="WCFBase.IWCFService"><identity><dns value="localhost" /></identity></endpoint><endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /><host><baseAddresses><addbaseAddress="http://localhost:9090/WCFService/" /></baseAddresses></host></service></services></system.serviceModel></configuration>2.加载WCF服务打开主程序入口Main方法,代码如下namespace WCFBase{class Program{static void Main(string[] args){ServiceHost host = new ServiceHost(typeof(WCFService));host.Open();Console.WriteLine("I'am Here.");Console.ReadKey();host.Close();}}}至此运行该控制台程序,WCF服务启可使用。

wcf 面试题

wcf 面试题

wcf 面试题WCF(Windows Communication Foundation)是一个用于构建分布式应用程序的框架,它提供了一种统一的编程模型,用于在应用程序之间进行通信。

WCF 面试题旨在评估面试者对 WCF 框架的理解程度和其在实际应用中的应用能力。

在接下来的文章中,将回答一些常见的 WCF 面试题,并提供详细的解释和示例。

一、什么是 WCF?WCF 是一种用于构建分布式系统的微软技术,它提供了一种可靠、安全和可扩展的方式,用于在应用程序之间进行通信。

WCF 使用SOAP(简单对象访问协议)作为其主要通信协议,并支持其它协议如HTTP、TCP 等。

它提供了对于消息传输、编码、安全性等方面的灵活配置。

二、WCF 的主要组件有哪些?WCF 的主要组件包括:1. 服务契约(Service Contract):定义了服务的操作和消息交换模式。

2. 数据契约(Data Contract):用于在服务和客户端之间传输数据的约定。

3. 消息(Message):在 WCF 中,所有的通信都是通过消息进行的。

消息可以包含头部、正文和尾部信息。

4. 服务端点(Service Endpoint):定义了服务的地址、协议和绑定信息。

5. 绑定(Binding):指定了服务和客户端之间的通信规范。

6. 行为(Behavior):用于配置和扩展服务的运行时行为。

三、WCF 支持哪些传输协议?WCF 支持多种传输协议,包括但不限于:1. HTTP:最常用和通用的传输协议,在互联网环境中广泛使用。

2. TCP:提供了高性能和可靠性的传输协议,适用于局域网或内部网络。

3. MSMQ:使用消息队列来进行异步的、可靠的消息传输。

4. Named Pipes:适用于在同一台机器上的进程间通信。

5. Peer-to-Peer:支持对等网络的传输协议,用于构建分布式系统。

四、如何创建和部署一个 WCF 服务?创建和部署一个 WCF 服务需要以下步骤:1. 定义服务契约和数据契约。

WCF客户端动态设置WCF服务器主机

WCF客户端动态设置WCF服务器主机

WCF客户端动态设置WCF服务器主机WCF是一种用于创建分布式应用程序的技术,它使用消息传递和服务描述来实现不同计算机上的应用程序之间的通信。

在WCF中,客户端和服务器之间的通信是通过绑定进行的,绑定指定了通信所使用的协议、传输方式和编码格式等。

在WCF客户端中,可以动态设置WCF服务器主机,以便在运行时根据需要更改服务器的地址。

这可以提供灵活性和可扩展性,使客户端能够连接到不同的服务器。

要动态设置WCF服务器主机,首先需要定义一个绑定对象,并指定通信所使用的协议、传输方式和编码格式。

WCF提供了多个默认的绑定,如BasicHttpBinding、WsHttpBinding、NetTcpBinding等,可以根据具体情况选择合适的绑定类型。

下面是一个使用BasicHttpBinding的示例:```csharp//创建绑定对象BasicHttpBinding binding = new BasicHttpBinding(;//设置绑定属性binding.Security.Mode = BasicHttpSecurityMode.None;binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;binding.Security.Message.ClientCredentialType = erName;//设置服务器地址//创建客户端对象MyServiceClient client = new MyServiceClient(binding, address);//调用服务端方法client.MethodName(;```在上面的示例中,通过创建一个BasicHttpBinding对象,并设置了一些绑定属性,如安全模式和客户端凭据类型。

然后,创建一个EndpointAddress对象,指定服务器的地址。

WCF软件协同开发平台的研究与实现

WCF软件协同开发平台的研究与实现

WCF软件协同开发平台的研究与实现摘要:wcf是微软基于soa推出的.net平台下的框架产品,是对于.net remoting,enterprise service,wse,web services等技术的整合。

文章阐述了wcf多层服务架构及wcf流传输技术,并将其应用于软件协同开发平台的构建。

关键词:wcf;流传输;软件协同开发1 引言现今,在软件开发项目过程中,需求分析员、程序员等各工作人员间需要不断沟通交流,以期按要求完成项目。

目前,很多企业的软件项目开发各成员间通常用e-mail、msn、ftp、oa系统,或是会议来实现交流。

这些传统的交流模式效率相对较低,无法实现团队内部之间的实时交流,容易造成工作脱节、延误、错办等情况。

基于wcf的软件协同开发平台可有效解决上述问题,缩短开发时间,提高团队协作能力,实现最大程度资源共享。

wcf(windows communication foundation)是微软基于soa (service-oriented architecture)推出的.net平台下的框架产品,是对于.net remoting,enterprise service,wse,web services 等技术的整合。

使用该框架,开发人员构建跨平台、安全、可靠和支持事务处理的企业级互联应用解决方案。

因此,将wcf技术应用于软件协同开发系统,从而使得该系统能够可以被任何应用系统、在任何地方进行访问,提高协同工作效率。

2 基于wcf的面向服务的多层结构本系统结构分成客户层、wcf服务层、业务层、数据层。

这种开发模型在客户层和业务层之间增加了服务层,避免让业务层暴露于客户层中,如图1所示。

客户层:在本系统中,客户层采用windows窗体展示给用户;在后台代码中,通过服务端与服务进行通讯,具体而言,就是通过访问wcf服务的接口,将用户提交的数据发送给数据库服务器,并获取需要的数据。

wcf服务层:服务层包含一个接口层,定义了接口的方法及安全规则,包含了wcf服务契约的具体内容。

WCF知识点详解

WCF知识点详解
c class Student { [DataMember] public string UserName { get; set; } [DataMember] public int Age { get; set; } [DataMember] public GenderMode Gender { get; set; } }
DataMemberAttribute特性只能应用类成员,只有应用了DataMemberAttribute特性的 字段或者属性成员才能成为数据契约的数据成员。
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, Inherited = false, AllowMultiple = false)] public sealed class DataMemberAttribute : Attribute { public DataMemberAttribute(); public bool EmitDefaultValue { get; set; } public bool IsRequired { get; set; } public string Name { get; set; } public int Order { get; set; } }


ProtectionLevel属性 ProtectionLevel属性表示当使用一个服务契约时,绑定必须达到的消息安全级别 。该属性的类型为.Security.ProtectionLevel,它的三个枚举值是: None,Sign和EncryptAndSign。当.Security.ProtectionLevel属性的值为Sign 时,服务发送和接受的所有消息必须经过签名。当属性设置为None时,表示服务发送 和接受的消息无须启用消息安全。ProtectionLevel属性影响的是是消息体中数据,不会 影响消息头的结构。 SessionMode属性 SessionMode属性表示程序里使用的通道必须、允许或者不允许使用会话通道。 SessionMode属性是System.ServiceModel.SessionMode类型,它的枚举值是Allowed-允 许会话、NotAllowed-不允许会话、Required-要求会话(需要有支持会话的Binding支持 ,WsHttpBinding、NetTcpBinding等)。若要设计一个会话契约,我们建议使用 Required 方式,而不是默认值Allowed。SessionMode.Required值要求必须使用传输层 会话,但应用层会话却不是必要的,如果服务终结点的绑定没有维持一个传输层会话 ,就不能为这样的服务契约配置SessionMode.Required。这一约束条件会在装载服务 时进行验证。但是,我们仍然可以将服务配置为单调服务,服务实例会在每次客户端 调用期间创建与销毁实例。只有当服务被配置为会话服务时,服务实例才会存活于整 个客户端会话中。

WCF简单实例

WCF简单实例

为了使读者对基于WCF的编程模型有一个直观的映像,我将带领读者一步一步地创建一个完整的WCF应用。

本应用功能虽然简单,但它涵盖了一个完整WCF应用的基本结构。

对那些对WCF不是很了解的读者来说,这个例子将带领你正式进入WCF的世界。

在这个例子中,我们将实现一个简单的计算服务(CalculatorService),提供基本的加、减、乘、除的运算。

和传统的分布式通信框架一样,WCF本质上提供一个跨进程、跨机器以致跨网络的服务调用。

在本例中,客户端和服务通过运行在相同的同一台机器上不同进程模拟,图1体现了客户端和服务端进程互相调用的关系。

图1 计算服务应用运行环境WCF的服务不能孤立地存在,需要寄宿于一个运行着的进程中,我们把承载WCF服务的进程称为宿主,为服务指定宿主的过程称为服务寄宿(Service Hosting)。

在我们的计算服务应用中,采用了两种服务寄宿方式:通过自我寄宿(Self-Hosting)的方式创建一个控制台应用作为服务的宿主(寄宿进程为Hos ting.exe);通过IIS寄宿方式将服务寄宿于IIS中(寄宿进程为IIS的工作进行W3wp.exe)。

客户端通过另一个控制台应用模拟(进程为Client.exe)。

接下来,我们就一步一步来构建这样的一个WCF应用。

步骤一:构建整个解决方案通过VS 2008创建一个空白的解决方案,添加如下四个项目。

项目的类型、承载的功能和相互引用关系如下,整个项目在VS下的结构如图2所示。

Contracts:一个类库项目,定义服务契约(Service Contract),引用System.ServiceMode程序集(W CF框架的绝大部分实现和API定义在该程序集中);∙Services:一个类库项目,提供对WCF服务的实现。

定义在该项目中的所有WCF服务实现了定义在Con tracts中相应的服务契约,所以Services具有对Contracts项目的引用;∙Hosting:一个控制台(Console)应用,实现对定义在Services项目中的服务的寄宿,该项目须要同时引用Contracts和Services两个项目和System.ServiceMode程序集;∙Client:一个控制台应用模拟服务的客户端,该项目引用System.ServiceMode程序集。

什么是 Windows Communication Foundation

什么是 Windows Communication Foundation

什么是Windows Communication Foundation?另请参见Web 服务中包含了用于应用程序间通信的标准协议,它在全球范围内的广泛采纳改变了软件开发。

例如,如今Web 服务提供的功能包括安全性、分布式事务协调和可靠的通信。

Web 服务所发生的这些改变的效益应反映在开发人员所使用的工具和技术方面。

设计Windows Communication Foundation (WCF) 的目的是为分布式计算提供可管理的方法,提供广泛的互操作性,并为服务定位提供直接的支持。

WCF 通过一种面向服务的新型编程模型简化了关联应用程序的开发。

通过提供分层的体系结构,WCF 支持多种风格的分布式应用程序开发。

WCF 通道体系结构在底层提供了异步的非类型化消息传递基元。

而建立在此基础之上的是用于进行安全可靠的事务处理数据交换的各种协议功能,以及广泛的传输协议和编码选择。

类型化编程模型(称为“服务模型”)设计用来降低分布式应用程序的开发难度,并为 Web 服务、.NET Framework 远程处理和企业服务领域的专业开发人员,以及将要从事WCF 开发的人员提供熟悉的开发体验。

该服务模型的特点在于它将Web 服务的概念直接映射到 .NET Framework 公共语言运行库(CLR) 中的对应内容,包括将消息灵活且可扩展地映射到用诸如Visual C# 或Visual Basic 等语言实现的服务。

该服务模型提供支持松散耦合和版本管理的序列化功能,并提供与诸如消息队列(MSMQ)、COM+、 Web 服务、Web 服务增强(WSE) 等现有 .NET Framework 分布式系统技术以及很多其他功能的集成和互操作性。

问题示例下面的示例阐释了WCF 处理的一些问题。

一家汽车租赁公司决定创建一个新的应用程序,用于汽车预定。

该租车预定应用程序的创建者知道,应用程序所实现的业务逻辑必须能够让公司内外运行的其他软件访问。

wcf使用流程

wcf使用流程

WCF使用流程WCF(Windows Communication Foundation)是一种用于构建分布式应用程序的框架。

它提供了一种统一的编程模型,可以在不同的应用程序之间进行通信,并支持多种传输协议和消息格式。

本文将详细描述WCF的使用流程,包括创建服务和客户端、配置服务和客户端、部署和测试。

1. 创建服务首先,我们需要创建一个WCF服务。

下面是创建WCF服务的步骤:步骤1:创建一个新的WCF服务项目在Visual Studio中,选择”新建项目”,然后选择”WCF”类别下的”WCF服务应用程序”模板。

输入项目名称并点击”确定”。

步骤2:定义服务契约打开生成的IService.cs文件,在其中定义服务契约(Service Contract)。

契约是一个接口,它定义了可由客户端调用的操作。

[ServiceContract]public interface IService{[OperationContract]string GetData(int value);}步骤3:实现服务契约打开生成的Service.cs文件,在其中实现契约中定义的操作。

这些操作将在客户端调用时执行。

public class Service : IService{public string GetData(int value){return $"You entered: {value}";}}步骤4:配置服务终结点打开生成的App.config文件,在其中配置服务终结点。

终结点定义了服务的地址、协议和消息格式。

<system.serviceModel><services><service name="WcfService.Service"><endpoint address="" binding="basicHttpBinding" contract="WcfService.ISe rvice" /><endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExch ange" /></service></services><behaviors><serviceBehaviors><behavior><serviceMetadata httpGetEnabled="true" /><serviceDebug includeExceptionDetailInFaults="false" /></behavior></serviceBehaviors></behaviors></system.serviceModel>2. 创建客户端接下来,我们需要创建一个WCF客户端,以便与服务进行通信。

网上的WCF教程

网上的WCF教程

无废话WCF入门教程之一什么是WCF一、概述Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口,它是.NET框架的一部分。

由 .NET Framework 3.0 开始引入。

WCF的最终目标是通过进程或不同的系统、通过本地网络或是通过Internet 收发客户和服务之间的消息。

WCF合并了Web服务、.net Remoting、消息队列和Enterprise Services的功能并集成在Visual Studio中。

WCF专门用于面向服务开发。

二、基于 的应用程序开发与面向服务开发在基于 的应用程序开发中,我们由客户机的浏览器访问应用程序服务器,然后通过应用程序服务器中的数据库连接去连接数据库服务器,读取或是操作数据,有时候可能会多一个文件服务器。

大家可以观察到,基本上所有的应用都放在了一台服务器上,但对于一个,由于业务上的需要(如:与外部系统交互),一台服务器很难支持所有的应用。

我们再看下面的图:客户机使用浏览器访问服务器A,服务器A为了业务需要与其他各种应用部署在服务器B、C、D....再通过WCF技术互相通信,相互访问...然而面向服务的好处不仅仅在此,他还提供了不同语言不同操作系统的可交互性..由于本文不是介绍SOA的文章,感兴趣的同学可以参见:SOA三、第一个WCF程序1. 新建立空白解决方案,并在解决方案中新建项目,项目类型为:WCF服务应用程序。

建立完成后如下图所示:2.删除系统生成的两个文件IService1.cs与Service1.svc。

3.添加自定义的WCF【服务文件】User.svc,此时vs2010会自动生成WCF 接口文件IUser.cs,我们在IUser中定义WCF方法ShowName,在User.svc.cs 对该接口的方法进行实现。

代码如下:1using System.ServiceModel;23namespace WCFService4 {5[ServiceContract]6public interface IUser7{8[OperationContract]9string ShowName(string name);10}11 }121314namespace WCFService15 {16public class User : IUser17{18public string ShowName(string name)19{20string wcfName = string.Format("WCF服务,显示姓名:{0}", name); 21return wcfName;22}23}24 }大家可以看到,在WCF中的接口与普通接口的区别只在于两个上下文,其他的和我们正常学习的接口一样。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

控制台程序以NetTCP方式部署WCF
1、VS 2010新建项目,模板选择WCF服务库。

2、编写接口及实现代码,如果需要在服务端实时显示调用情况,可以添加输出信息,也可将记录保存到文本文件中,以生成日志。

3、编辑该服务项目,最终版本需Release。

4、另外新建控制台程序项目,添加引用,选择服务项目。

5、添加引用:System.ServiceModel,并在主程序中编写服务开启:
using (ServiceHost host = new ServiceHost(typeof(Wcf1.Service1)))
{
host.Opened += delegate
{
Console.WriteLine("Service已经启动,按任意键终止服务!");
};
host.Open();
Console.Read();
}
6、将服务项目中的app.config拷贝到托管项目中,并用WCF配置工具进行设置。

如果同时有wsHttpBinding和netTcpBinding,需要建立两个基地址,如
http://localhost:8050/Wcf1/Service1/
net.tcp://localhost:8052/Wcf1/Service1/
另外,需要建立4个终结点,分别是wsHttpBinding、 mexHttpBinding和netTcpBinding、mexTcpBinding,netTcpBinding可以参照wsHttpBinding进行设置。

7、将部署项目进行编译,最终版本使用Release。

8、将编译好的程序拷贝到服务器,一般只需三个文件:一个EXE文件、一个与EXE同名的配置文件、一个WCF服务文件。

修改其中的配置文件,主要修改地址和端口。

9、在服务器运行控制台程序。

10、为服务器防火墙开启相应端口号,一般只需开启入站规则,如果IIS上已开启了部分端口,对于控制台服务需另外开启新的端口。

11、用VS建立客户端程序,添加服务引用,可拷贝服务配置文件中的地址,然后修改IP地址,wsHttpBinding以http开头,netTcpBinding需以net.tcp开头,添加前往即可发现服务内容。

12、在客户端会自动生成app.config文件,右击编辑WCF配置,修改终结点的地址为服务器的地址。

13、编写客户端调用服务程序:
ServiceReference1.Service1Client client = new
ServiceReference1.Service1Client("NetTcpBinding_IService1");
client.ClientCredentials.Windows.ClientCredential.Domain = "192.168.1.1";
erName = "Administrator";
client.ClientCredentials.Windows.ClientCredential.Password = "123456";
如果服务端同时配置了多个绑定,在生成客户端代理里需写明相应的终结点名称,可从app.config 中查找。

14、运行客户端程序,进行测试,同时可查看服务端程序的输出内容是否正常。

15、经测试,首次连接时会有几秒种的延迟,随后会很快。

相关文档
最新文档