我的代码如下:
Public Class xxxSvcHostFactory
Inherits ServiceHostFactory
Protected Overrides Function CreateServiceHost(ByVal serviceType As Type, ByVal baseAddresses As Uri()) As ServiceHost
Dim result As New WebServiceHost2(serviceType, True, baseAddresses)
Return result
End Function
End Class
服务合同定义如下:
<ServiceContract()>
Public Interface IxxxSvc
<Description("")>
<OperationContract()>
<WebGet(ResponseFormat:=WebMessageFormat.Json,
UriTemplate:="CustomerDetails?id={CustomerId}")>
Function GetCustomerDetails(ByVal CustomerId As String) As Customer
End Interface
Public Class MySvc
Implements IxxxSvc
Public Function GetCustomerDetails(ByVal CustomerId As String) As Customer Implements IxxxSvc.GetCustomerDetails
.
.
.
End Function
End Class
什么时候会执行CreateServiceHost?
是针对每次通话,还是针对每个传输会话,还是应用程序启动时?
ServiceHost什么时候到期?
如果我实现静态变量,它可以通过多个会话(例如来自IE和Firefox)获得。如何为特定会话维护静态变量(例如,如果我从IE访问,则从FF访问时不应共享同一会话)。
我在我的应用程序中使用WCF REST功能(核心REST而不是REST Starter工具包)。 感谢
答案 0 :(得分:1)
取决于! :-)一如既往......
如果您使用MyService.svc
文件在IIS中托管此服务,则IIS将为每个传入请求实例化WebServiceHost
并启动服务类实例以处理请求(好吧,它可能是对此进行一些缓存 - 但是,不太清楚主机将如何以及多长时间等等。)。据称IIS具有“基于消息的激活” - 例如可能每个传入的消息/请求都将激活WebServiceHost
。
当您在Windows NT服务,控制台应用程序等中进行自托管时,显然完全取决于您 - 您可以自行决定创建WebServiceHost
,然后启动并运行直到您明确将其删除(或未处理的异常使其失效)。自托管可以让您更好地控制WebServiceHost
的生命周期。
在MSDN上查看Hosting And Consuming WCF Services - 有很多关于托管和服务主机生命周期的有趣信息等等。