wcf - Microsoft Azure 实例部署中的 RoleEnvironmentException

标签 wcf azure

我正在使用 WCF 服务和 Azure 玩游戏。

我有多个 WCF 服务在 Azure 上成功运行,该特定服务一直正常运行,直到我决定将其重新部署到不同的(现有)云服务下。

我将其从 VS 解决方案中的云服务 X 角色下删除,并将其添加到另一个云服务角色中。我发布了,当我发布时,我收到异常错误 “未处理的异常:Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironmentException”。我听说该服务不断被回收。

此消息显示在 Azure 管理门户中此 WCF 服务所在实例下。我已经在它自己的云服务和实例服务下尝试过它。

查看了有关该问题的很少文章 ( http://blogs.msdn.com/b/davidmcg/archive/2011/03/10/diagnosticmonitor-roleenvironmentexception-was-unhandled.aspx ) 和 ( http://www.microsofttranslator.com/bv.aspx?from=&to=en&a=http%3A%2F%2Fpul.se%2FBlog-Post-Error-RoleEnvironmentException-was-unhandled_Video-ptFrIOhJU6%2ClWCxfMvJiNbE )

远程连接到实例,我在事件查看器中看到以下内容:

Application: WaIISHost.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironmentException
Stack:
   at Microsoft.WindowsAzure.ServiceRuntime.Implementation.Loader.RoleRuntimeBridge.<InitializeRole>b__0()
   at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
   at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
   at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
   at System.Threading.ThreadHelper.ThreadStart()

我还发现:

Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironmentException: error
   at Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.GetLocalResource(String localResourceName)
   at WCFServiceDataTransfer.AzureLocalStorageTraceListener.GetLogDirectory()
   at WCFServiceDataTransfer.WebRole.OnStart()

但这是 AzureLocalStorageTraceListener 中自动生成的代码。

我怎样才能找到这个问题的根源?

Web.Config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <!--  To collect diagnostic traces, uncomment the section below or merge with existing system.diagnostics section.
        To persist the traces to storage, update the DiagnosticsConnectionString setting with your storage credentials.
        To avoid performance degradation, remember to disable tracing on production deployments.
  <system.diagnostics>     
    <sharedListeners>
      <add name="AzureLocalStorage" type="WCFServiceDataTransfer.AzureLocalStorageTraceListener, WCFServiceDataTransfer"/>
    </sharedListeners>
    <sources>
      <source name="System.ServiceModel" switchValue="Verbose, ActivityTracing">
        <listeners>
          <add name="AzureLocalStorage"/>
        </listeners>
      </source>
      <source name="System.ServiceModel.MessageLogging" switchValue="Verbose">
        <listeners>
          <add name="AzureLocalStorage"/>
        </listeners>
      </source>
    </sources> 
   </system.diagnostics> -->
  <system.diagnostics>
    <trace>
      <listeners>
        <add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=1.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" name="AzureDiagnostics">        
        </add>
      </listeners>
    </trace>
  </system.diagnostics>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <client />
    <services>
      <service behaviorConfiguration="TransferServiceBehavior" name="WCFServiceDataTransfer.TransferService">
        <endpoint address="" binding="basicHttpBinding" bindingConfiguration="TransferService" contract="WCFServiceDataTransfer.ITransferService">
        </endpoint>
      </service>

    </services>
    <bindings>
      <basicHttpBinding>
        <binding name="TransferService" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"
          transferMode="Streamed">
          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
            maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
          <security mode="None" />
        </binding>
      </basicHttpBinding>
    </bindings>

        <behaviors>
      <serviceBehaviors>
        <behavior name="TransferServiceBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <dataContractSerializer maxItemsInObjectGraph="2147483647" />
          <serviceDebug includeExceptionDetailInFaults="true" />
          <serviceThrottling maxConcurrentCalls="500" maxConcurrentSessions="500" maxConcurrentInstances="500" />

        </behavior>
        <behavior>                   
          <!-- To avoid disclosing metadata information, set the value below to false before deployment -->
          <serviceMetadata httpGetEnabled="true" />
          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />

  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
    <!--
        To browse web app root directory during debugging, set the value below to true.
        Set to false before deployment to avoid disclosing web app folder information.
    -->
    <directoryBrowse enabled="true" />
  </system.webServer>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Data.Services.Client" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.1.0.0" newVersion="5.1.0.0" />
      </dependentAssembly>
    </assemblyBinding>
    <httpRuntime maxRequestLength="2097151" useFullyQualifiedRedirectUrl="true" executionTimeout="14400"   />   
  </runtime>
</configuration>

条目

public class WebRole : RoleEntryPoint
    {
        public override bool OnStart()
        {
            // To enable the AzureLocalStorageTraceListner, uncomment relevent section in the web.config  
            DiagnosticMonitorConfiguration diagnosticConfig = DiagnosticMonitor.GetDefaultInitialConfiguration();
            diagnosticConfig.Directories.ScheduledTransferPeriod = TimeSpan.FromMinutes(1);
            diagnosticConfig.Directories.DataSources.Add(AzureLocalStorageTraceListener.GetLogDirectory());

            // For information on handling configuration changes
            // see the MSDN topic at http://go.microsoft.com/fwlink/?LinkId=166357.

            return base.OnStart();
        }
    }

最佳答案

好的,this是什么解决了这个问题。 我将以下内容添加到了 ServiceDefinition.csdef 文件中的 Imports 结束标记下。它根本不存在,一旦我添加了以下内容并发布,实例就能够启动。

使用1.8版本

<LocalResources>
   <LocalStorage name="WCFServiceDataTransfer.svclog" sizeInMB="1000" cleanOnRoleRecycle="false" />
</LocalResources>

帮助这有一天可以帮助别人。

关于wcf - Microsoft Azure 实例部署中的 RoleEnvironmentException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16379265/

相关文章:

c# - 在 C# 中编写自定义属性,如 ASP.Net MVC 授权属性

c# - Windows Azure 网站中的自定义性能计数器

c# - 无法在 DLL 'MediaInfo_New' 中找到名为 'MediaInfo.dll' 的入口点

azure - 在 AKS 上安装 AzureML 扩展时出错

node.js - 使用 Node 从 azure keyvault 中提取数据

wcf - 如何每 X 分钟运行一次 biztalk 编排

c# - WCF - 设置大文件下载超时

c# - 从 WCF 服务返回大型集合的推荐方法是什么?

c# - WCF 可以使用 https 访问 SOAP 1.1 服务吗?

sql-server - 无法在 SQL Azure 数据库上启用查询存储