我在WCF服务API
周围有一个包装器Class APIWrapper
{
private WCFClient _client;
//constructor opens a client connection
public APIWrapper()
{
_client = new WCFClient();
_client.open();
}
public API1()
{
_client.doSomething1();
}
public API2()
{
_client.doSomething2();
}
}
我想问:
Q1会发生超时例外吗?如果此包装器类实例存在太长时间了?(默认情况下,WCF连接吗?例如,在构建包装器类之后,其API1或API2在10分钟后调用,该分析比此WCF连接的超时值更长。
Q2我需要明确关闭连接吗?
~APIWrapper
{
if(_client !=null)
try{
_client.close(); }
catch(Exception e){
_client.Abort(); }
}
我不确定您为什么要这样做,但是如果WCF托管在IIS7中,WCF将以有或没有连接开头,没有意义,保持连接活跃。<<<<<<<<<<<<<<<</p>
根据我的经验,当无状态时,这些服务效果最好(除非您有充分的理由)。我强烈建议每次打开并关闭连接。如果您正在这样做以进行性能,则有其他方法可以避免每次关闭和打开。
Q1:根据MSDN,OpenTimeout为1分钟
http://msdn.microsoft.com/en-us/library/system.servicemodel.channels.binding.opentimeout.aspx
Q2:您无需明确关闭连接,但这是一个很好的做法,我强烈建议这样做。不关闭连接可能会导致WCF上的开销。
,据我所知,wcf不要保持连接的活力。在预定义的时间通过(intactivityTimeout =" 00:10:00")之后,当您尝试调用_client.dosomething.dosomething1()或服务上的任何其他方法时,连接将引发异常。
wcf无活动超时
要保持连接活着,您应该以预定义的间隔调用一种简单的方法,可以说每1分钟。
但是,我同意乔迪的观点,您应该使用WCF服务无状态,直到确实有必要为止。