WCF发布方式介绍

转载出处:http://blog.csdn.net/fangxing80/article/details/6101790

从VS2005推出WCF以来,WCF逐步取代了Remoting, WebService成为.NET上分布式程序的主要技术。WCF统一的模型整合了以往的 WebService、Remoting、MSMQ 等技术,让分布式开发变得更加简单,方便,快捷。 wcf_host_architecture (上图选自《Programming WCF Services》) WCF基本概念(ABC): 1.地址(Address):决定服务的地址;2.绑定(Binding):决定服务的细节;3.契约(Contract):服务的定义(抽象),决定消息结构的定义。 WCF的发布:WCF服务的发布可以有几种形式: IIS, Windows Service, Self-Host(可以是Console程序也可以是Winform程序)。 WCF的工具: Windows Communication Foundation 工具 简单实例-1: 内置AppDomain (无配置) 1. Service1.cs [c-sharp] view plaincopy namespace WCFStudy1 { [ServiceContract] public interface IService1 { [OperationContract] string SendMessage(string clientInput); } public class Service1 : IService1 { #region IService1 Members public string SendMessage(string clientInput) { return string.Format("Server Get Message: {0}", clientInput); } #endregion } } 2. Program.cs [c-sharp] view plaincopy using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ServiceModel; namespace WCFStudy1 { class Program { static void Main(string[] args) { // 创建一个独立AppDomain作为服务端。 AppDomain.CreateDomain("Server1").DoCallBack(delegate { ServiceHost host = new ServiceHost(typeof(Service1)); host.AddServiceEndpoint(typeof(IService1), //契约(C) new BasicHttpBinding(), //绑定(B) "http://localhost:9999/myservice"); //地址(A) host.Open(); }); // 下面是客户端 ChannelFactory factory = new ChannelFactory( new BasicHttpBinding(), "http://localhost:9999/myservice"); IService1 client = factory.CreateChannel(); var reply = client.SendMessage("Hello WCF"); Console.WriteLine(reply); Console.Read(); } } } 如图所示: 简单实例-2: 创建 Console Self-Host SelfHostConsole_overview WcfServiceLib - 服务契约的实现; *ConsoleHost工程 – Wcf宿主; *ConsoleClient工程 - Wcf客户端 创建WcfServiceLib工程(选WCF Service Library工程模板: VS为我们自动添加一个IService1.cs和Service1.cs) SelfHostConsole_servicelib Host工程里引用WcfServiceLib工程 SelfHostConsole_hostRef 将WcfServiceLib里App.config移动到ConsoleHost工程里,删掉Lib工程里的App.config SelfHostConsole_appconfig Host工程的Program.cs添加下面的代码,右击Builder工程 [c-sharp] view plaincopy using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ServiceModel; using WcfServiceLib; namespace WCFStudy2ConsoleHost { class Program { static void Main(string[] args) { using(var host = new ServiceHost(typeof(Service1))) { host.Open(); Console.WriteLine("Service start."); Console.Read(); } } } } 运行 ConsoleHost工程 bin/debug 下面的 exe(这一步是为了生成客户端代理,需要启动Host) 在Client工程里通过添加 Service References,生成客户端Proxy,关闭exe SelfHostConsole_clientproxy 在Client工程的Program.cs里添加如下代码。 [c-sharp] view plaincopy using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace WCFStudy2ConsoleClient { class Program { static void Main(string[] args) { MyWcfSvc.Service1Client client = new MyWcfSvc.Service1Client(); var result = client.GetData(123); Console.WriteLine(result); Console.Read(); } } } F5 运行Solution里的Host, 再右击Client工程选Debug的Start new instance方式,运行Client 运行结果: SelfHostConsole_runtime 由于ServiceHost实例是被创建在应用程序域中,必须保证宿主进程在调用服务期间不会被关闭,因此利用Console.Read()来阻塞进程,以使得控制台应用程序能够一直运行,直到人为关闭应用程序。 简单实例-3: 创建 Winform Self-Host Winform的Self-Host和ConsoleHost类似,先添加 WcfServiceLib 工程引用,将 WcfServiceLib 里的App.config 移到 Winform 工程里。加上启动Service的代码就OK了! [c-sharp] view plaincopy public partial class Form1 : Form { public Form1() { InitializeComponent(); } private ServiceHost host = null; // 开启服务端 private void btnStart_Click(object sender, EventArgs e) { try { if (host != null) host.Close(); host = new ServiceHost(typeof(WcfServiceLib.Service1)); host.Open(); this.textBox1.Text = "Server Opened!"; } catch (Exception ex) { MessageBox.Show(ex.ToString()); if (host != null) host.Close(); } } // 关闭服务端 private void btnStop_Click(object sender, EventArgs e) { if (host != null) { host.Close(); this.textBox1.Text += "Server Closed!"; } } } 在Winform中,不要使用 using(...) 代码块,这将导致在Button方法结束后自动销毁Host对象而关闭服务。 简单实例-4: 创建 Windows Service Host Windows Services宿主便于管理者方便地启动或停止服务,且在服务出现故障之后,能够重新启动服务。还可以通过Service Control Manager(服务控制管理器),将服务设置为自动启动方式,省去了服务的管理工作。此外,Windows Services自身还提供了一定的安全性以及检测机制和日志机制。 1. 创建Windows Service工程 2. 引用 WcfServiceLib 工程,添加 App.config (和前面Host添加的App.config一样) 3. 重写 WindowsService 类的 OnStart 和 OnStop 方法 [c-sharp] view plaincopy public partial class Service1 : ServiceBase { public Service1() { InitializeComponent(); } private ServiceHost host = null; protected override void OnStart(string[] args) { if (host != null) host.Close(); host = new ServiceHost(typeof(WcfServiceLib.Service1)); host.Open(); } protected override void OnStop() { if (host != null) host.Close(); } } 4. 创建Service的安装类:在WindowsService 类的设计界面上右击选择 [Add Installer] 修改 serviceProcessInstaller 的 Account 属性 (默认为User) 改为 LocalSystem 通过在Visual Studio的 [Command Prompt] (命令行)模式下通过 InstallUtil 工具安装 Windows服务: InstallUtil [绝对路径]/WCFStudy2WindowsServiceHost.exe (安装成功之后,使用Services.msc查看服务) 简单实例-5: 创建 IIS Host 最简单的就是直接创建一个 WCF Service Application 就OK了。 以上所有工程的关系图如下:

WCF发布方式介绍

时间: 2024-10-06 04:52:51

WCF发布方式介绍的相关文章

WCF寄宿方式

WCF开发框架形成之旅---WCF的几种寄宿方式 WCF寄宿方式是一种非常灵活的操作,可以在IIS服务.Windows服务.Winform程序.控制台程序中进行寄宿,从而实现WCF服务的运行,为调用者方便.高效提供服务调用.本文分别对这几种方式进行详细介绍并开发例子进行说明,以求大家对WCF寄宿的方式进行全面的认识和了解. 1. WCF服务的IIS服务寄宿 我在我前面几篇WCF开发框架的介绍文章中,介绍过了WCF常用的一种寄宿方式,IIS服务寄宿.这种寄宿方式是最为方便的方式,而且由于服务只需要

Qt官方开发环境生成的exe发布方式--使用windeployqt(windeployqt是单独的程序,放在低版本qt4目录下也可以运行的)

Qt 官方开发环境使用的动态链接库方式,在发布生成的exe程序时,需要复制一大堆 dll,如果自己去复制dll,很可能丢三落四,导致exe在别的电脑里无法正常运行.因此 Qt 官方开发环境里自带了一个工具:windeployqt.exe.以官方 Qt 5.4.0+MinGW 开发环境为例,从开始菜单-->Qt 5.4.0-->5.4-->MinGW 4.9 (32-bit)-->Qt 5.4 for Desktop (MinGW 4.9 32 bit),可以打开 Qt 命令行,从这

WCF 寄宿方式 代码,配置文件

可以通过代码或者配置文件寄宿WCF服务,在使用过程中的一些心得,记录一下,方便后续查阅. 预备知识,几个地址的作用 1. behavior.HttpGetUrl  定义元数据的地址,如果不定义基地址,则必须定义HttpGetUrl ,是The absolute or relative location of the metadata. 2.baseAddresses 服务的地址,因为元数据(metadata)是属于一个host的,并不属于一个endpoint.此基地址就是客户端添加服务引用的地址

Qt官方开发环境生成的exe发布方式--使用windeployqt

Qt 官方开发环境使用的动态链接库方式,在发布生成的exe程序时,需要复制一大堆 dll,如果自己去复制dll,很可能丢三落四,导致exe在别的电脑里无法正常运行.因此 Qt 官方开发环境里自带了一个工具:windeployqt.exe.以官方 Qt 5.4.0+MinGW 开发环境为例,从开始菜单-->Qt 5.4.0-->5.4-->MinGW 4.9 (32-bit)-->Qt 5.4 for Desktop (MinGW 4.9 32 bit),可以打开 Qt 命令行,从这

java解析xml文件四种方式介绍、性能比较和基本使用方法

一.介绍: 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定信息.分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作.由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的.DOM以及广义的基于树的处理具有几个优点.首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改.它还可以在任何时候在树中上下导航,而不

蓝绿部署、滚动发布、灰度发布的介绍以及最佳实践

蓝绿部署.滚动发布.灰度发布的介绍以及最佳实践 在一般情况下,升级服务器端应用,需要将应用源码或程序包上传到服务器,然后停止掉老版本服务,再启动新版本.但是这种简单的发布方式存在两个问题,一方面,在新版本升级过程中,服务是暂时中断的,另一方面,如果新版本有BUG,升级失败,回滚起来也非常麻烦,容易造成更长时间的服务不可用. 为了解决这些问题,人们研究出了多种发布策略,下面我们一一介绍. 蓝绿部署 所谓蓝绿部署,是指同时运行两个版本的应用,如上图所示,蓝绿部署的时候,并不停止掉老版本,而是直接部署

IntelliJ IDEA 编译方式介绍

原文:https://github.com/judasn/IntelliJ-IDEA-Tutorial/blob/newMaster/make-introduce.md 编译方式介绍 相比较于 Eclipse 的实时自动编译,IntelliJ IDEA 的编译更加手动化,虽然 IntelliJ IDEA 也支持通过设置开启实时编译,但是不建议,因为太占资源了.IntelliJ IDEA 编译方式除了手工点击编译按钮进行编译之外,还有就是在容器运行之前配置上一个编译事件,先编译后运行.默认下 In

javascript继承的实现方式介绍

javascript继承的实现方式介绍:作为面向对象的一门语言,继承自然是javascript所比不可少的特性,下面就简单介绍一下javascript实现继承的几种方式,希望能够对需要的朋友带来一定的帮助,下面进入正题.一.对象冒充: function A() { this.name="蚂蚁部落"; this.address="青岛市南区"; } function B() { this.target="提供免费的教程"; this.newA=A;

关于iOS中音视频播放的几种方式介绍

在IOS设计中,音视频的播放通常涉及到大部分设计过程中,因此清晰了解并使用音视频播放结构就很重要了,下面介绍几种常用的音视频的播放方式: (一) 使用系统提供的播放器,用system sound service去播放时长小于30s的音乐,通常是.caf,.aif,.wav格式: 创建一个系统播放对象: AudioServicesCreateSystemSoundID ( CFURLRef inFileURL, SystemSoundID *outSystemSoundID); AudioServ