2009-06-09 8 views
3

私はMutexを使用してWebサービスが一度に1回だけ実行されていることを確認していますが、 WaitOnceとReleaseMutexです。.NET:Mutexを使用してWebサービスを一度に1回だけ呼び出すこと

私はこれ持っている:私は二度すぐにWebサービスにアクセスしよう

private static Mutex mutex = new Mutex(); 

    [WebMethod] 
    public bool TriggerAll() 
    { 
     bool ranJobs = false; 
     try 
     { 
      if (mutex.WaitOne(0, false)) 
      { 
       Thread.Sleep(10000); // simulate a long operation 
       ranJobs = true; 
      } 
     } 
     finally 
     { 
      mutex.ReleaseMutex(); 
     } 
     return ranJobs; 
    } 

I'fを、2番目の呼び出しはfalseを返しませんが、私はmutex.ReleaseMutex(「objectsyncronizationメソッドからApplicationExceptionをを取得します"onsyncronizedコードブロックから呼び出されました" - スウェーデン語から大まかに翻訳)

これを行うにはどうすればよいですか?

答えて

7

WaitOneがtrueを返すかどうかにかかわらず、ReleaseMutexに電話しています。あなたはそれを取得するために管理している場合のみ、ReleaseMutexを呼び出す必要があります:

if (mutex.WaitOne(0, false)) 
    { 
     try 
     { 
      Thread.Sleep(10000); // simulate a long operation 
      ranJobs = true; 
     } 
     finally 
     { 
      mutex.ReleaseMutex(); 
     } 
    } 

はあなたのミューテックスを経由して、複数のプロセスまたはのAppDomainで使用されていますか?そうでない場合は、通常のCLRモニタ(Monitor.TryEnterを使用)は軽くなります。

関連する問題