我有一个调用 [web 方法] 的客户端。在 [web 方法] 中,我正在检查是否存在某些文件,这些文件本身包含在 while(true) 循环中。当存在文件或发生超时时,回调将返回给客户端。
我注意到运行它是 wp3 进程在内存使用方面的攀升。
有人告诉我,如果使用 FileWatcher 而不是 while(true) 循环,那么内存将放在 .Net 框架而不是 IIS 进程上。我试图对此进行测试,但是当“找到”文件时,我看不到如何将回调返回给客户端。
我的代码:
[桌面应用]
private void _tmrRequestHandler_Tick(object sender, EventArgs e)
{
try
{
_tmrRequestHandler.enabled = false;
//call my web service async
}
catch
{
_tmrRequestHandler.enabled = true;
}
}
private void WSconnector_GetRequestsCompleted(object sender, wsConnector.GetRequestsCompletedEventArgs e)
{
//do stuff
_tmrRequestHandler.enabled = true;
}
[网络服务器] - 旧方式
[WebMethod]
public string[] GetRequests(string _mac)
{
string[] _response = null;
while (_fileCount == 0)
{
string[] _files = Directory.GetFiles("my root path" + _mac, "*.dat");
_fileCount = _files.Length;
if (_files.Length > 0)
{
_response = new string[_files.Length];
_files.CopyTo(_response, 0);
return _response;
}
}
}
[网络服务器] - 建议的新方式
[WebMethod]
public string[] GetRequests(string _mac)
{
string[] _response = null;
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = AbsoluteRequestQueue + _mac;
watcher.NotifyFilter = NotifyFilters.LastWrite;
watcher.Filter = "*.dat*";
watcher.Changed += new FileSystemEventHandler(OnChanged);
watcher.EnableRaisingEvents = true;
}
private void OnChanged(object source, FileSystemEventArgs e)
{
//file found!!
//HOW DO I GIVE CALLBACK TO MY CLIENT AND SHOULD I REALLY BE CONSIDEREING DOING IT THIS WAY??
}
谢谢