[WCF] Hosting
来源:互联网 发布:mac book pro 15寸 编辑:程序博客网 时间:2024/05/01 18:40
WCF 服务无法独立存在,它必须驻留于一个 Windows 进程当中,我们把这个 Windows 进程称之为 host 进程。一个 host进程之中可以驻留多个 WCF 服务,而一个 WCF 服务也可以在多个 host 进程中存在,host 进程甚至同时也可以是 WCF的客户端进程。Host 进程则可以通过 IIS、WAS(Windows Vista)驻留或者也可以是应用程序的一部分(自行开发)。
IIS hosting
驻留于 IIS 的主要优点在于 host 进程会在客户端首次请求服务时启动和由 IIS 来管理 host进程的生命周期。缺点则是一旦选择了驻留于 IIS 那么就只能选择 HTTP 来进行数据传输了,而如果驻留于 IIS5的话,另一个限制则是所有的服务都只能使用相同的端口号。
下面是创建一个 IIS hosting 的步骤:
1. 在 VS2005 中创建一个 Web 站点(WCF Service)
2. 修改该站点下面的 .svc 文件
<% @ServiceHostLanguage="C#"
Debug="true"
Service="Anrs.Service.AnrsService"
CodeBehind="~/App_Code/Services/AnrsService.cs"%>
.svc 文件的内容非常简单,就是标识服务及服务所在的文件。这里需要注意的就是服务的名字空间是 ServiceContract 特性中指定的名字空间,而不是接口所在的名字空间。
3. 修改 Web.config 配置文件
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<system.serviceModel>
<services>
<service name="Anrs.Service.AnrsService" behaviorConfiguration="returnFaults">
<endpoint contract="Anrs.Service.IAnrsServiceContract1" binding="wsHttpBinding"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="returnFaults" >
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
<system.web>
<compilation debug="true"/>
</system.web>
</configuration>
同 .svc 文件一样,需要注意 service 节点的 name 属性值指定的名字空间。所有设置 OK 以后,如果在浏览器中访问 .svc 文件就能看到下面这样的效果。
Self-Hosting
在 VS2005 中创建一个 Self-Hosting 也是非常简单的,下面是一个典型的 Console Self-Hosting 的例子。
using System.ServiceModel;
namespace Anrs.Service
{
class Program
{
static void Main(string[] args)
{
Uri baseAddress = new Uri("http://localhost:8086/");
ServiceHost sh = new ServiceHost(typeof(AnrsService), baseAddress);
sh.Open();
Console.Write("Press any key to exit");
Console.ReadLine();
sh.Close();
}
}
}
ServiceHost类派生于 ServiceHostBase 抽象类,后者又派生于 CommunicationObject 抽象类,而CommunicationObject 则实现了 ICommunicationObject 接口。下面是ICommunicationObject 接口的定义:
{
void Open();
void Close();
void Abort();
event EventHandler Closed;
event EventHandler Closing;
event EventHandler Faulted;
event EventHandler Opened;
event EventHandler Opening;
IAsyncResult BeginClose(AsyncCallback callback, object state);
IAsyncResult BeginOpen(AsyncCallback callback, object state);
void EndClose(IAsyncResult result);
void EndOpen(IAsyncResult result);
CommunicationState State
{ get;}
//More members
}
public enum CommunicationState
{
Created,
Opening,
Opened,
Closing,
Closed,
Faulted
}
接口中定义了 BeginClose/BeginOpen 这两个方法,通过调用这两个方法,可以在 open/close 服务时异步地进行一些操作。
- [WCF] Hosting
- [WCF学习笔记] Hosting
- Hosting WCF Service
- Self Hosting WCF Service : Block IP
- WCF 3.5: Hosting Services for WebGet
- WCF服务自托管(Self-Hosting)
- hosting
- Many hosting options are available for WCF services
- Hosting WCF Service with netTcpBinding in Windows Service
- Hosting WCF Services in Windows Activation Service {转载}
- [原创]WCF技术剖析之四:基于IIS的WCF服务寄宿(Hosting)实现揭秘
- WCF技术剖析之四:基于IIS的WCF服务寄宿(Hosting)实现揭秘
- WCF技术剖析之四:基于IIS的WCF服务寄宿(Hosting)实现揭秘
- 化零为整WCF(5) - 宿主Hosting(宿主在IIS, Application, WAS, WindowsService)
- WCF开发之宿主(Hosting) IIS/WAS宿主 Windows服务宿主 Windows应用程序
- 化零为整WCF(5) - 宿主Hosting(宿主在IIS, Application, WAS, WindowsService)
- [原创] WCF技术剖析之六:为什么在基于ASP.NET应用寄宿(Hosting)下配置的BaseAddress无效
- WCF4.0新特性体验(7):IIS无SVC文件托管WCF服务(IIS hosting without an SVC file )
- 准备Scrum之旅 之 回家的故事 ——《轻松Scrum之旅》(11)
- ScriptManager和UpdatePanel控件(转)
- Ubuntu基本命令大全
- 让LoadRunner走下神坛(分析lr的,感觉挺好)
- JBPM学习手册(1)
- [WCF] Hosting
- JQuery 1.32 DatePicker 增强版解决结束日期小于开始日期的问题
- setsockopt()用法
- 初学AJAX,有点儿晕....
- 一条语句让程序崩溃
- 只能输入数字的文本框
- Java Mail简介
- Matrix Code 草稿
- ArcSDE C-API 开发:读取属性数据