目前我面临着我无法大量的工作和搜索后,解决一个问题,我问过类似的问题,但没有得到任何答复,也许是因为我没有正确地问它,所以我删除了这个问题。在ASP.net + C#.NET互斥访问
好吧我正在使用MailBEE.net对象库下载电子邮件,它的工作正常,除非如果再次调用下载方法,而前一个调用仍处于下载阶段,则两个消息副本开始下载,这是错误的。
的ASP.net页面上我打电话说电子邮件下载一个ASHX处理程序
public class sync : IHttpHandler {
public void ProcessRequest(HttpContext context)
{
ApplicationData.layer Functions = new layer();
context.Response.ContentType = "text/text";
int messageCount = Convert.ToInt16(context.Request.QueryString["messageCount"]);
if (Functions.SyncMail("email", "user", "password", "pop.gmail.com", messageCount) == "Successful")
{
context.Response.Write("New Messages Downloaded.");
}
//context.Response.Write("Hello World");
}
}
我打电话使用jQuery从另一个(ASPX)页以上ASHX处理程序
<script type="text/javascript">
$(document).ready(function() {
asyncLoad();
});
function asyncLoad() {
document.getElementById("CustomerDetails").innerHTML = "<img alt='' src='Images/ajax-loader.gif' />" + " <span>Downloading New Messages...</span>";
$('#CustomerDetails').load("sync.ashx?messageCount=" + "10");
callAgain();
}
function callAgain() {
setInterval(asyncLoad, 20000);
}
</script>
的目的是在一段时间(20000延迟)后继续调用sync.ashx来检查新消息,问题是如果sync.ashx的一个呼叫在下载消息中忙于在此期间进行新呼叫,则它开始下载相同的消息副本,因为它找不到ema的ID数据库中的前一个电话将要发出。
我需要某种形式的互斥访问,如果一次通话是在忙下载邮件然后另一个呼叫不应进行。
喜欢的东西
if(IsAlreadyDownloading == False)
{
Functions.SyncMail(params)
}
凡IsAlreadyDownloading是一个全球性的标志或互斥应设置为true,一旦一个呼叫开始下载和设置假,一旦它完成下载或已经发生了一些异常,表明另一个呼叫可安全地做。
因为它是一个ASP.net应用程序,我们不知道什么时候用户将导航从开始下载呼叫,什么时候会返回到该页面,以便再次调用下载处理程序应进行或不离开当前页面。
我不知道我是否正确解释了它,但我希望有人能理解。谢谢。