构建WCF面向服务的应用程序
- 格式:ppt
- 大小:462.50 KB
- 文档页数:25
VisualStudio2019使⽤WCF服务什么是WCFWindows Communication Foundation (WCF) 是⼀个框架,⽤于⽣成⾯向服务的应⽤程序。
它取代了较旧的进程间通信技术,例如 ASMX Web 服务、.NET 远程处理、企业服务 (DCOM) 和 MSMQ。
WCF 将所有这些技术的功能汇集在⼀个统⼀的编程模型下,简化了开发分散式应⽤程序的体验。
使⽤ WCF,可以将数据作为异步消息从⼀个服务终结点发送到另⼀个服务终结点。
服务终结点可以是由 IIS 承载的持续可⽤的服务的⼀部分,也可以是应⽤程序中承载的服务。
终结点可以是从服务终结点请求数据的服务客户端。
简单消息可以是作为 XML 发送的单个字符或单个单词,复杂消息可以是⼆进制数据流。
创建WCF服务如果发现找不到wcf项⽬,这时你需要去安装Visual Studio 的Windows Communication Foundation组件1. 创建过程如下2. 项⽬创建成功后,会⾃动⽣成的⼀些演⽰⽂件IService1.cs// 注意: 使⽤“重构”菜单上的“重命名”命令,可以同时更改代码和配置⽂件中的接⼝名“IService1”。
[ServiceContract]public interface IService1{[OperationContract]string GetData(int value);[OperationContract]CompositeType GetDataUsingDataContract(CompositeType composite);// TODO: 在此添加您的服务操作}// 使⽤下⾯⽰例中说明的数据约定将复合类型添加到服务操作。
// 可以将 XSD ⽂件添加到项⽬中。
在⽣成项⽬后,可以通过命名空间“WcfServiceDemo.ContractType”直接使⽤其中定义的数据类型。
概述Windows Communication Foundation (WCF)是Microsoft为构建面向服务的应用提供的分布式通信编程框架,是.NET Framework 3.5的重要组成部分。
使用该框架,开发人员可以构建跨平台、安全、可靠和支持事务处理的企业级互联应用解决方案。
根据微软官方的解释,WCF(之前的版本名为“Indigo”)是使用托管代码建立和运行面向服务(Service Oriented)应用程序的统一框架。
它使得开发者能够建立一个跨平台的安全、可信赖、事务性的解决方案,且能与已有系统兼容协作。
WCF是微软分布式应用程序开发的集大成者,它整合了.Net平台下所有的和分布式系统有关的技术,例如.Net Remoting、ASM X、WSE和MSMQ。
以通信(Communication)范围而论,它可以跨进程、跨机器、跨子网、企业网乃至于Internet;以宿主程序而论,可以以,EXE,WPF,Windows Forms,NT Service,COM+作为宿主(Host)。
WCF可以支持的协议包括TCP,HTTP,跨进程以及自定义,安全模式则包括SAML,Kerberos,X509,用户/密码,自定义等多种标准与模式。
也就是说,在WCF框架下,开发基于SOA的分布式系统变得容易了,微软将所有与此相关的技术要素都包含在内,掌握了WCF,就相当于掌握了叩开SOA大门的钥匙。
WCF是建立在.Net Framework 2.0基础之上的,正式的版本应该会作为Windows Vist a的核心部分而Release。
然而,这并不代表WCF只能运行在Windows Vista下。
只要安装了WinFX Runtime Components,在Windows XP和Windows 2003操作系统下,仍然可以使用。
Visual Studio 2005中并没有包含WCF,但是当安装好了WinFX Runtime Compo nents后,我们就可以在Visual Studio 2005环境下开发和创建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绑定、管道绑定的终结点。
详解在IIS中配置并运行WCF服务 2009年12月18日 07:28 【IT168 技术文档】WCF是Microsoft为构建面向服务的应用提供的分布式通信编程框架,是.NET Framework 3.5的重要组成部分。
使用该框架,开发人员可以构建跨平台、安全、可靠和支持事务处理的企业级互联应用解决方案。
在IIS中运行服务之前我们让Derivatives Calculator服务在一个.NET可执行文件中运行,在这个练习中,我们将让服务在IIS中运行。
利用IIS作为宿主程序来运行WCF服务通常有许多好处。
·将项目构建到\bin目录中为了方便部署,我们需要对服务项目进行配置,让它编译到一个bin目录中。
1. 在Solution Explorer中右键单击DerivativesCalculatorService项目并选择Properties菜单项。
2. 在Project designer中,单击Build选项卡。
3. 将Output path从bin\Debug\改为bin\,如图所示。
Project designer中经过调整的Output path属性4. 选择File | Save All菜单项。
5. 选择File | Close菜单项来关闭Project designer。
现在,在构建服务时产生的所有文件都会被输出到\bin目录中。
·添加一个.svc文件为了让WCF服务能够在IIS中运行,我们需要用一种特殊的内容文件(.svc文件)表示它。
这种模型和ASMX页面在IIS中的表示方法类似。
.svc文件包含一个WCF专用的处理指示符(@ServiceHost),这个指示符告诉WCF运行库在收到消息时激活服务。
1. 在Solution Explorer中右键单击DerivativesCalculatorService项目并选择Add | New Item菜单项。
2. 在Add New Item对话框中,选择Text File模板。
问题提出:采用的方案: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简介有很多人都想深入的了解WCF,我学习了WCF很长时间了,这里就满足一下好奇WCF技术的朋友,下面就是WCF简介。
WCF是Windows Communication Foundation的缩写,原来代号为Indigo,它是MS为SOA(Service Oriented Architecture 面向服务架构)而设计的一套完整的技术框架。
利用它能够开发出分布式(Distributed)应用程序,而且开发难度相比以前的.NET Remoting和 XML Web Service等都有了大幅度的降低。
可以说WCF 是目前微软平台下最先进的SOA框架,也是微软在今后一段时间内在该领域的主打产品。
它具有很多优点,总结起来,其最大的特征在于:1.充分整合了原来的.NET Remoting, Xml Web Service(ASMX, Web服务),MSMQ (Message Queuing 消息队列),WSE(Web Services Enhancements),Enterprise Service (COM+)等多项分布式技术,取其精华,弃其糟粕。
2.WCF虽然整合了几项技术,但开发难度不增反降,简单易学。
相信在未来的几年中,WCF一定在SOA的大潮中披荆斩棘,大展身手。
WCF是Microsoft为构建面向服务的应用提供的分布式通信编程框架,是.NET Framework 3.5的重要组成部分。
使用该框架,开发人员可以构建跨平台、安全、可靠和支持事务处理的企业级互联应用解决方案。
WCF提供了现有 Web Service、.NET Remoting、Message Queuing和Enterprise Services技术的全部功能。
现有解决方案均有各自的优点,也有相应的缺点,WCF综合了上述技术的优点,形成了一种新的技术。
WCF简介之WCF提供了如下特性:1.驻留组件和服务:与使用定制主机、.NET Remoting 和WSE一样,可以把WCF服务放在库中、Windows 服务上、COM+过程中,或Windows Form程序上,进行对等计算。
⼀个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:由协议、地址和端⼝三个部分组成。