0

我有如下代码:

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 工具包)。谢谢

4

1 回答 1

1

这取决于!:-) 一如既往.....

如果您通过使用MyService.svc文件在 IIS 中托管此服务,则 IIS 将为WebServiceHost每个传入请求实例化并启动一个服务类实例来处理请求(好的,它可能对此进行了一些缓存 - 但是,不太清楚如何和主人会活多久等)。据说 IIS 具有“基于消息的激活” - 例如,可能每个传入的消息/请求都将激活WebServiceHost.

当您在 Windows NT 服务、控制台应用程序等中自行托管时,这显然完全取决于您 - 您WebServiceHost可以自行决定创建它,然后它会启动并运行,直到您明确将其拆除(或未处理的异常将其拆除) )。自托管使您可以更好地控制WebServiceHost.

查看MSDN 上的Hosting And Consuming WCF Services - 有很多关于托管和服务主机生命周期的有趣信息等等。

于 2010-07-12T16:29:56.047 回答