C# で DirectoryEntry を使用して WMI 呼び出しを行うと、失敗がキャッシュされるため、再試行せずにすぐに再試行が失敗するように見えます。
これを再現するために私が行ったことは次のとおりです。
DirectoryEntry directoryEntry = new DirectoryEntry();
directoryEntry.AuthenticationType = AuthenticationTypes.Secure;
directoryEntry.Username = connectUsername;
directoryEntry.Password = connectPassword;
directoryEntry.Path = "WinNT://" + connectServerName + ",computer";
newUser = directoryEntry.Children.Add(userName, "user");
- ファイアウォールが接続をブロックしている VM を呼び出します。
- しばらく時間がかかり、「ネットワーク パスが見つかりませんでした」で失敗します。
- ただし、ファイアウォール ルールを有効にして再試行すると、WMI はすぐに同じネットワーク パス エラーをスローします。
- しばらく待ってから (今は長いかどうかはわかりませんが、数分) 再試行できます。ネットワークが機能していることに気付くでしょう。
コードは WCF サービスにあり、すべての呼び出しがすべての新しいインスタンスに対して新鮮である必要があります。
キャッシュが発生している場所と、新しい DirectoryEntry が新しい呼び出しを行うようにする方法についてのアイデアはありますか?
更新: iisreset (サイトと Web サービスの両方) を試しましたが、キャッシュがまだ発生しています。次に、Windows Management Instrumentationサービスを再起動すると、キャッシュされていない新しい呼び出しが行われました。これにより、問題は C#/WCF コードやネットワークにあるのではなく、WMI にあることがわかりました。WMI にキャッシュされていない新しい呼び出しを強制する方法はありますか?