常常需要与宿主实例进行交互。这对于使用自托管的方式是不可或缺的。当使用IIS或WAS时,不能直接访问宿主。为了克服这个障碍,WCF提供了一个宿主工厂。在.svc文件中使用Factory标签,使用此工厂,而不使用默认工厂:

<%@ ServiceHost
Language = "C#"
Debug = "true"
CodeBehind = "~/App_Code/MyService.cs"
Service = "MyService"
Factory = "MyServiceFactory"
%>

当不显示使用.svc文件时,也可以在配置文件中指定宿主工厂:

“<serviceActivations>
<add relativeAddress = "MyService.svc"
service = "MyService"
factory = "MyServiceFactory"
/>
</serviceActivations>” 摘录来自: Juval Löwy and Michael Montgomery. “Programming WCF Services”。 iBooks.

自定义宿主工厂类必须继承自ServiceHostFactory类并重写虚方法CreateServiceHost():

“public class ServiceHostFactory : ...
{
protected virtual ServiceHost CreateServiceHost(Type serviceType,
Uri[] baseAddresses);
//More members
}” 摘录来自: Juval Löwy and Michael Montgomery. “Programming WCF Services”。 iBooks.

例如:

“class MyServiceFactory : ServiceHostFactory
{
protected override ServiceHost CreateServiceHost(Type serviceType,
Uri[] baseAddresses)
{
ServiceHost host = new ServiceHost(serviceType,baseAddresses); //Custom steps here return host;
}
}” 摘录来自: Juval Löwy and Michael Montgomery. “Programming WCF Services”。 iBooks.

CreateServiceHost()方法其实就相当于IIS或WAS托管服务的Main()方法,你可以以这样的目的来使用它。

尽管对于从 CreateServiceHost 返回的 ServiceHost 可以执行什么操作没有技术限制,但建议您尽可能使工厂实现简单化。如果有大量的自定义逻辑,最好将这些逻辑放入宿主内而不是工厂内,以便可以重用它们。

完整示例:CustomServiceHost.zip

参考:

Juval Löwy and Michael Montgomery. “Programming WCF Services”

使用 ServiceHostFactory 扩展宿主(https://msdn.microsoft.com/zh-cn/library/aa702697.aspx)

最新文章

  1. Python之路【第一篇】python基础
  2. php+ajax 登录注册页面
  3. (转)浅析JS运行机制
  4. PHP数组去重..............过滤字段
  5. android开发中的变量名称
  6. ServiceStack简介
  7. 【转】分析器窗口 Profiler window
  8. Linux下multipath多路径配置
  9. 认识html标签
  10. Android学习总结——Activity之间传递参数
  11. 将鼠标移到文本弹出一些字幕CSS达到,不及格JS达到
  12. IceMx.Mvc 我的js MVC 框架五、完善植物大战僵尸(雏形版增加动画)
  13. 【模板】51Nod--1085 01背包
  14. iOS 蓝牙开发资料记录
  15. Workerman创建聊天室实例
  16. C++实现文件内字符数、单词数、行数的统计
  17. 01 while 循环输入1 2 3 4 5 6 8 9 10
  18. window.open 浏览器差异.
  19. 【Linux】 基于centos7.2 安装 LAMP
  20. Java设计模式应用——备忘录模式

热门文章

  1. CSS读书笔记(3)---清除浮动的几种方法
  2. 02--C编程细节整理(一)
  3. (转) RabbitMQ学习之spring整合发送同步消息(注解实现)
  4. 企业级任务调度框架Quartz(3) 一个简单的Quartz 例子
  5. python调用函数实现数据的增删改查(1)
  6. 使用dom4j生成word的方法
  7. gradle多模块构建集成swagger
  8. 【LibreOJ 6278】 数列分块入门 2 (分块)
  9. docker安装tensorflow环境遇到的问题与解决方案
  10. solrj 操作 solr 单机版