2014-04-30 21 views
0

我有一些代码如下所示,这似乎工作需要。我的问题是 - 是否有必要有一个webservice.close?这将在子结束时超出范围。我问的主要原因是wsClient终于得到了代码警告,是wcf web service.close需要

变量'wsClient'在它被赋值之前被使用。运行时可能会导致空引用异常。

最好的结果可能是重组并保留.close并摆脱警告。

Dim wsClient As wsGates.ConsoleClient 

    Try 
     wsClient = New wsGates.ConsoleClient 
     Dim wsRet As wsGates.clsReturn 

     wsRet = wsClient.Phase1Validate("15024") 
    Catch 

    Finally 
     If wsClient IsNot Nothing Then wsClient.Close() 
    End Try 

End Sub 

回答

1

如果不关闭它,底层通道可能会保持打开状态。虽然这可能最终在对象GC'd或应用程序退出时关闭,但最好关闭它以尽快释放资源。

不是使用Try声明,我会建议Using

Using wsClient As New wsGates.ConsoleClient 
    Dim wsRet As wsGates.clsReturn 

    wsRet = wsClient.Phase1Validate("15024") 
End Using 
0

不需要关闭wsClient,因为它的使用寿命仅限于该方法。之后,该方法执行它自动摧毁对象。

+1

.NET对象未在方法退出时自动销毁。它们是在某个任意时间收集垃圾的。 –