コードと構成:
https://www.windowsazure.com/en-us/develop/net/common-tasks/diagnostics/の公式チュートリアルに従って診断を有効にしました。私の診断初期化子はGlobal.asax(Azure WebRoleに移植されたこのWCFのWebRole.csはありません)から呼び出され、次のように非常に単純です。
public bool Initialize()
{
DiagnosticMonitorConfiguration config = DiagnosticMonitor.GetDefaultInitialConfiguration();
config.WindowsEventLog.DataSources.Add("Application!*");
config.WindowsEventLog.ScheduledTransferPeriod = System.TimeSpan.FromMinutes(1.0);
DiagnosticMonitor.Start("Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString", config);
return true;
}
クラウドとローカルの文字列は同じです:
local
と構成に同じクラウドベースの診断接続文字列を使用していcloud
ます。
<?xml version="1.0" encoding="utf-8"?>
<ServiceConfiguration serviceName="MyApp.API.Azure1" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="2" osVersion="*" schemaVersion="2012-05.1.7">
<Role name="MyApp.API">
<Instances count="1" />
<ConfigurationSettings>
...
<Setting name="Microsoft.WindowsAzure.Plugins.Caching.ConfigStoreConnectionString" value="DefaultEndpointsProtocol=https;AccountName=myapi;AccountKey=MyVeryLongStringHereWhichIsActuallyAKeyForAPlaceInTheCloudWhereUnicornsDanceUnderDoubleRainbows" />
</ConfigurationSettings>
<Certificates>
<Certificate name="Microsoft.WindowsAzure.Plugins.RemoteAccess.PasswordEncryption" thumbprint="ThumbPrintStringsAreBiggerThanPinkiePrintString" thumbprintAlgorithm="sha1" />
</Certificates>
</Role>
</ServiceConfiguration>
エラー:
Azure Emulator(ローカルコンピューティング)内で上記を実行すると、エラーは発生しません(診断用のクラウド接続文字列にもかかわらず)。AzureでWebロールを実行すると(同じ診断スティングともちろんコードを使用して)、次のエラーが発生します。
[UnauthorizedAccessException: Access to the path '05d5e525-e1bc-4a37-8bfb-010bb2941301-mswapd-lock' is denied.]
System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) +12895415
System.Threading.MutexTryCodeHelper.MutexTryCode(Object userData) +229
System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData) +0
System.Threading.Mutex..ctor(Boolean initiallyOwned, String name, Boolean& createdNew, MutexSecurity mutexSecurity) +629
System.Threading.Mutex..ctor(Boolean initiallyOwned, String name, Boolean& createdNew) +18
Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitor.StartDiagnosticsMonitorProcess(DiagnosticMonitorStartupInfo info) +171
Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitor.ReconfigureMonitoringProcess(ConfigRequest req) +209
Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitor.UpdateState(DiagnosticMonitorStartupInfo startupInfo) +207
Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitor.StartWithExplicitConfiguration(DiagnosticMonitorStartupInfo startupInfo, DiagnosticMonitorConfiguration initialConfiguration) +643
Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitor.Start(CloudStorageAccount storageAccount, DiagnosticMonitorConfiguration initialConfiguration) +47
Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitor.Start(String diagnosticsStorageAccountConfigurationSettingName, DiagnosticMonitorConfiguration initialConfiguration) +108
myApp.api.Diag.Diagnostics.Initialize() in c:\Work\MyApp.API\source\Diag\Diagnostics.cs:42
Global.Application_Start(Object sender, EventArgs e) in c:\Work\MyApp.API\source\Global.asax.cs:30
試み:何も機能しなかった
- Azure独自の監視/ログメカニズムがストレージアカウントをロックダウンしていた場合に備えて、このストレージアカウントのすべてのAzure監視およびログ(ポータルから)を無効にしました
UseDevelopmentStorage=true
ローカル構成(ローカルコンピューティング/ Azureエミュレーター)の場合でも、診断のために実際のクラウド接続文字列に置き換えられまし た。- 診断初期化子を最小限に簡略化しました(上記を参照)。ただし、
DiagnosticMonitor.Start(...)
常に失敗します。 - .cscfgファイルに別の診断接続文字列を作成し(.csdefでも参照)、元
Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString
の文字列がAzureインフラストラクチャでも使用されている場合は、別の文字列を使用できるようにします。ヘルプなし、同じエラー。
これをデバッグしようとして何時間も費やしましたが、Azureでは常にこのエラーが発生します。
質問:
誰かが私がこのエラーを取り除くのを手伝ってもらえますか?私はあなたが持っているかもしれないいくつかのアイデアを試すことができます。私はMSチュートリアルに失望していますが、失望は役に立ちません。