私は紺碧の開発に不慣れです。Azure アプリケーションはローカルでは問題なく動作しますが、Azure にデプロイすると SEHException がスローされます。Visual Studio を使用して公開すると、両方のインスタンスがリサイクルでスタックしていることをアクティビティ ログが示します。リモート デスクトップを使用してインスタンスに接続し、そのインスタンスのブラウザでアプリケーションにアクセスしようとしました。
次の例外が発生しています。
Exception: System.Runtime.InteropServices.SEHException: External component has thrown an exception
StackTrace:
[SEHException (0x80004005): External component has thrown an exception.]
RdGetLocalResource(UInt16* , _RD_RESOURCE** ) +0
_LOCALRESOURCE.GetLocalResourceW(UInt16* name, _LOCALRESOURCE** ppout) +309
Microsoft.WindowsAzure.ServiceRuntime.Internal.InteropRoleManager.GetLocalResource(String name, InteropLocalResource& ret) +57
Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.GetLocalResource(String localResourceName) +231
MyApp.Web.Infrastructure.Services.AzureLocalStorageService.GetLocalResourceRootPath(String name) +27
MyApp.Infrastructure.AzureStorageAccountFactory.Create() +117
MyApp.IoCConfig.RegisterDependencies() +667
MyApp.Web.MvcApplication.Application_Start() +260
[HttpException (0x80004005): External component has thrown an exception.]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) +4058693
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext conext, MethodInfo[] handlers) +191
System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +352
System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +407
System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +375
[HttpException (0x80004005): External component has thrown an exception.]
System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +11703936
System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +141
System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +4870757
RoleEnvironment.GetLocalResource がエラーを引き起こしていることを示しています。RoleEnvironment.GetConfigurationSettingValue("MYKEY") を呼び出すときに SEHException が発生するのはなぜですか? RoleEnvironment.GetConfigurationSettingValue で同じ例外を取得します。しかし、エラーはローカル環境にありました。ここで、アプリはローカル環境では正常に調整されますが、Azure では失敗します。その理由は何ですか?
ここに私の ServiceDefinition と ServiceConfiguration.Cloud ファイルがあります
ServiceDefinition.csdef
<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="MyApp.Azure" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2012-05.1.7">
<WebRole name="MyApp.Web" vmsize="ExtraSmall">
<Sites>
<Site name="Web">
<Bindings>
<Binding name="Endpoint1" endpointName="Endpoint1" />
</Bindings>
</Site>
</Sites>
<Endpoints>
<InputEndpoint name="Endpoint1" protocol="http" port="80" />
</Endpoints>
<Imports>
<Import moduleName="RemoteAccess" />
<Import moduleName="RemoteForwarder" />
</Imports>
<ConfigurationSettings>
<Setting name="StorageConnectionString" />
<Setting name="MediaAccountName" />
<Setting name="MediaAccountKey" />
</ConfigurationSettings>
<LocalResources>
<LocalStorage name="UploadedVideosCache" cleanOnRoleRecycle="false" sizeInMB="10240" />
<LocalStorage name="TraceFiles" cleanOnRoleRecycle="true" sizeInMB="50" />
</LocalResources>
</WebRole>
</ServiceDefinition>
ServiceConfiguration.Cloud.cscfg
<?xml version="1.0" encoding="utf-8"?>
<ServiceConfiguration serviceName="MyApp.Azure" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="2" osVersion="*" schemaVersion="2012-05.1.7">
<Role name="MyApp.Web">
<Instances count="2" />
<ConfigurationSettings>
<Setting name="StorageConnectionString" value="DefaultEndpointsProtocol=https;AccountName=[accountname];AccountKey=[primary account key]" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.Enabled" value="true" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountUsername" value="[remoteusername]" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountEncryptedPassword" value="[encryptedpassword]" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountExpiration" value="2013-09-15T23:59:59.0000000+05:30" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteForwarder.Enabled" value="true" />
<Setting name="MediaAccountName" value="[mediaservicesaccountname]" />
<Setting name="MediaAccountKey" value="[mediaservicesaccountkey]" />
</ConfigurationSettings>
<Certificates>
<Certificate name="Microsoft.WindowsAzure.Plugins.RemoteAccess.PasswordEncryption" thumbprint="[thumbprint]" thumbprintAlgorithm="sha1" />
</Certificates>
</Role>
</ServiceConfiguration>