Socket socket;
Thread thread;
void Application_Start(object sender, EventArgs e)
{
// 在应用程序启动时运行的代码
//用SOCKET测试
int port = 6000;
string host = "192.168.1.101";
IPAddress ip = IPAddress.Parse(host);
IPEndPoint ipe = new IPEndPoint(ip, port);
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个Socket
socket.Connect(ipe);//连接到服务器
thread = new Thread(new ThreadStart(Send));
thread.IsBackground = true;
thread.Start();
}
public void Send()
{
while (true)
{
try
{
if (socket != null)
{
string sendStr = "这是测试生命周期的字符串!";
byte[] bs = Encoding.UTF8.GetBytes(sendStr);
socket.Send(bs, 0, bs.Length, 0);//发送测试信息
Thread.Sleep(1000 * 60);//一分钟一次
}
}
catch (Exception ex)
{
}
}
}
void Application_End(object sender, EventArgs e)
{
// 在应用程序关闭时运行的代码
}
void Application_Error(object sender, EventArgs e)
{
// 在出现未处理的错误时运行的代码
}
上面的代码在服务端检测,20分钟 客户端就退出了,
除非保持页面会话,每隔几分钟webrequest 请求 网页,要不SOCKET就20分钟退出了(这时间貌似是SESSION的生命周期),
怎么能保持SOCKET对象持久不退出(意外情况退出不用考虑)!
WCF建立一个服务能保持持久化吗?
------解决思路----------------------
这种一般用windows service.
------解决思路----------------------
你这个貌似并没有关联到session
其实还有一个20分钟,在应用程序池的高级属性中,默认20分钟不活动(没收到请求),程序池的工作进程就会自动回收,直到收到下次请求时再开启
也就是下文中第4个设置项,工作进程的闲置回收时间(默认20分钟)
http://blog.csdn.net/rryqsh/article/details/8156558
------解决思路----------------------
也不建议把所有的回收策略都禁用,回收可以很好地保证站点持续稳定运行
一般国内的站点可以设置每天凌晨某个时候回收就行了
------解决思路----------------------
就是把你在app_start中的代码放到一个windows service中去执行。windows service在操作系统运行时一直在运行。
------解决思路----------------------
msdn有教程:
Walkthrough: Creating a Windows Service Application in the Component Designer
https://msdn.microsoft.com/en-us/library/zt39148a(v=vs.110).aspx
------解决思路----------------------
过期的不是Session,应该是应用程序池的工作进程被关闭了。在IIS里,针对应用程序池有一个空闲超时的设置,默认为20分钟,也就是在20分钟内如果没有任何请求到达IIS,进程就会被关闭,自然你的Socket就被关闭了。可以到IIS里关闭这个设置。
------解决思路----------------------
过期的不是Session,应该是应用程序池的工作进程被关闭了。在IIS里,针对应用程序池有一个空闲超时的设置,默认为20分钟,也就是在20分钟内如果没有任何请求到达IIS,进程就会被关闭,自然你的Socket就被关闭了。可以到IIS里关闭这个设置。
关闭了内存会不会一直增长呢?
那就要看你的程序怎么写了