@ServiceHost
将用于生成服务主机的工厂与要承载的服务以及访问或编译 .svc 文件中提供的宿主代码所需的其他编程方面相关联。
语法
<% @ServiceHost
Service = "Service, ServiceNamespace"
Factory = "Factory, FactoryNamespace"
Debug = "Debug"
Language = "Language"
CodeBehind = "CodeBehind"
%>
特性
服务
承载的服务的 CLR 类型名称。 此名称应为实现一个或多个服务协定的类型的限定名称。
Factory
用于实例化服务主机的服务主机工厂的 CLR 类型名称。 此属性是可选的。 如果未指定,则使用默认的 ServiceHostFactory,这将返回 ServiceHost 的实例。
调试
指示是否应使用调试符号编译 Windows Communication Foundation (WCF) 服务。 如果应使用调试符号编译 WCF 服务,则为 true
;否则为 false
。
语言
指定编译文件 (.svc) 中的所有内联代码时使用的语言。 这些值可以表示 .NET 支持的任何语言,包括 C#
、VB
和 JS
,这三项分别表示 C#、Visual Basic 和 JScript .NET。 此属性是可选的。
CodeBehind
当实现 XML Web service 的类未驻留在相同的文件中,且尚未编译成程序集并放置在 \Bin 目录中时,指定实现 XML Web service 的源文件。
注解
用于承载服务的 ServiceHost 是 Windows Communication Foundation (WCF) 编程模型中的一个可扩展点。 由于 ServiceHost 可能属于宿主环境不应直接实例化的多态类型,因此使用工厂模式对其进行实例化。
默认实现使用 ServiceHostFactory 创建 ServiceHost 的实例。 但你可以通过在 @ServiceHost
指令中指定工厂实现的 CLR 类型名称来提供自己的工厂(一个返回派生主机的工厂)。
若要使用自己的自定义服务主机工厂,而不使用默认工厂,只需在 @ServiceHost
指令中提供相应的类型名称,如下所示。
<% @ServiceHost Factory="DerivedFactory" Service="MyService" %>
尽可能简化工厂实现。 如果具有大量的自定义逻辑,则应将这些逻辑放入宿主而不是工厂内,这样可以获得更好的代码重用性。
例如,若要为 MyService
启用支持 AJAX 的终结点,请在 @ServiceHost
指令中为 Factory
属性的值指定 WebScriptServiceHostFactory,而不是使用默认的 ServiceHostFactory,如以下示例所示:
<% @ServiceHost
Service="MyService"
Language="C#"
Debug="true"
Factory="WebScriptServiceHostFactory"
%>