Vb.net 如何在每次web服务调用后关闭wcf服务

Vb.net 如何在每次web服务调用后关闭wcf服务,vb.net,wcf,Vb.net,Wcf,我继承了一个工作中的WCF Web服务,但有一个主要缺陷——WCF服务会消耗内存,除非服务重新启动,否则不会释放。在半天的请求命中web服务后,托管该服务的服务器上的内存攀升到接近2G,已经死在水里了 我希望能够在web服务接收到响应后释放内存,但不知道如何释放(WCF对我来说还是新的)。这是我的 具有如下服务契约的dll _ 公共接口ICheckOut _ 函数提交器(ByVal XMLForSubmitOrder作为字符串)作为字符串 端函数 我构建了一个服务引用,以将契约公开给我的web

我继承了一个工作中的WCF Web服务,但有一个主要缺陷——WCF服务会消耗内存,除非服务重新启动,否则不会释放。在半天的请求命中web服务后,托管该服务的服务器上的内存攀升到接近2G,已经死在水里了

我希望能够在web服务接收到响应后释放内存,但不知道如何释放(WCF对我来说还是新的)。这是我的

  • 具有如下服务契约的dll
  • _
    公共接口ICheckOut
    _
    函数提交器(ByVal XMLForSubmitOrder作为字符串)作为字符串
    端函数
    
    我构建了一个服务引用,以将契约公开给我的web服务

    这是我的web服务方法

    Private mMyClient As MyClient
    ...
    <WebMethod()> _
    <SoapHeader("MyCredentials")> _
    Public Function SubmitOrder(ByVal InputXML As String) As String
        If (MyCredentails IsNot Nothing) Then
            SetMyCredential()
            sReturn = mMyClient.SubmitOrder(InputXML)
            mMyClient.Close() 
            mMyClient = Nothing
            Return sReturn 
        End If
        Return "Invalid recipient credentials"
    End Function
    
    这些方法由服务管理器触发。我希望能够从我的web服务方法中调用一些东西,以便在返回后“拆除”WCF服务。我不确定这是否是最好的方法,但我不知道如何管理WCF服务的内存使用。

    每次通话服务

    <调用服务>是Windows通信基础默认值 实例化模式。为每次呼叫配置服务类型时 激活、服务实例、公共语言运行库(CLR) 对象,仅在客户端调用进行时存在。每个客户 请求获取一个新的专用服务实例。图2说明了 单次呼叫激活的工作原理


    您是否正确地处理您维护的任何资源?可能有需要关闭的数据库连接或流吗?很难从你的代码中分辨出来,因为你没有讨论过
    submitor
    MyClient
    做了什么。罪犯很可能就在里面。

    谢谢您的回复。是-数据库连接已关闭。也将检查流。
    Imports MyDll.WCFWrapper
    Public Class WCFService
        Private mMyServiceHost As ServiceModel.ServiceHost
        Protected Overrides Sub OnStart(ByVal args() As String)
            mMyServiceHost = New ServiceModel.ServiceHost(GetType(MyService))
            mMyServiceHost.Open()
        End Sub
        Protected Overrides Sub OnStop()
            If Not IsNothing(mMyServiceHost) Then
                mMyServiceHost.Close()
            End If
        End Sub
    End Class