问题标签 [azure-role-environment]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
4530 浏览

azure-role-environment - “ServiceRuntime.RoleEnvironment”的类型初始化程序抛出异常

我有一个自定义的 azure 实用程序 dll,它有一种方法可以从中读取配置值,ServiceConfiguration并且还有备用代码可以在没有运行的情况下AppSettings从中读取。此 DLL 可与在本地和生产云环境上运行的 Azure WCF 项目一起正常工作。web.configRoleEntironment

出于某种原因,我将这个 WCF 服务托管在 IIS 上的 Rackspace 服务器上。

在我的本地机器 IIS 上,WCF 服务工作正常,但在 Rackspace 上它崩溃并出现以下错误:

'Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment' 的类型初始化程序引发了异常。

我已经复制了WindowsAzure.ServiceRuntime.dll,Diagnostics.dllStorageClient.dll在机架空间的 bin 中。它仍然给出同样的错误。

我也试过复制<startup useLegacyV2RuntimeActivationPolicy="true">Web.config,还是不行。

任何的想法?我是否缺少更多云 DLL 或需要更多配置?

0 投票
2 回答
119 浏览

azure - 检测 *last* 角色实例何时在 Azure 上关闭

我知道有用于检测角色实例何时关闭或启动的事件RoleEnvironment,但是,有没有办法检测最后一个角色实例何时关闭?(即整个角色正在关闭)

我意识到这在硬件崩溃的情况下不会完全证明,但是当角色被终止以摆脱不再需要的服务总线订阅时,我需要做一些清理工作。

0 投票
1 回答
331 浏览

azure - 到 Azure 的 SSL 警告发布角色

将角色发布到 Azure 时,该进程处于挂起状态,我最终不得不取消该进程。以下警告不断重复“警告:服务器遇到未知故障:基础连接已关闭:无法为 SSL/TLS 安全通道建立信任关系。”

到目前为止,我在发布时没有遇到任何问题,但不确定发生了什么变化。使用 VS2010、.NET 4.0、Windows Azure SDK 2011 年 11 月。

0 投票
2 回答
823 浏览

azure - Windows Azure Role Environment - Unable to find assembly

我在调用 Windows Azure 角色环境时收到此错误。我检查了 DotNetOpenAuth.OAuth.Common.dll 作为 Copy Local = True。

任何想法?

System.TypeInitializationException 被捕获 HResult=-2146233036
Message='' 的类型初始化程序引发了异常。
源=Microsoft.WindowsAzure.ServiceRuntime 类型名称=
StackTrace:在 Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.GetLocalResource(String localResourceName) 在 Platform.Services.Api.Common.FileStorage.GetFilePath(String azureLocalResourceNameFromServiceDefinition, String blobContainer, String fileName) 在 d:\TFS Project\DEV\Platform\Platform .Development\Platform.Services.Api\Common\FileStorage.cs:D:\TFS Project\DEV\Platform\Platform.Development\Platform 中 Platform.Services.Api.Controllers.ReportingController.PrintProcessInteraction(Int64 id) 的第 16 行。 Services.Api\Controllers\ReportingController.cs:line 217 InnerException: .ModuleLoadException HResult=-2146233088 Message=C++ 模块在尝试初始化默认应用程序域时加载失败。

errorMessage, Exception innerException) at .LanguageSupport.Initialize(LanguageSupport* ) at .cctor() InnerException: System.Runtime.Serialization.SerializationException HResult=-2146233076 Message=Unable to find assembly 'DotNetOpenAuth.OAuth.Common, Version=4.2.0.0 ,文化=中性,PublicKeyToken=2780ccd10d57b246'。Source=mscorlib StackTrace:服务器堆栈跟踪:在 System.Runtime.Serialization.Formatters.Binary.ObjectReader.GetType(BinaryAssemblyInfo assemblyInfo, String name) 在 System.Runtime. .Serialization.Formatters.Binary.ObjectMap..ctor(String objectName, String[] memberNames,System.Runtime.Serialization.Formatters.Binary 处的 BinaryParser.ReadObjectWithMapTyped(BinaryObjectWithMapTyped 记录)。_BinaryParser.Run() 在 System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler handler, __BinaryParser serParser, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage) 在 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(在 System.Runtime.Remoting.Channels.CrossAppDomainSerializer.DeserializeObject(MemoryStream stm) 在 System.Runtime.Remoting.Messaging.SmuggledMethodCallMessage.FixupForNewAppDomain() 的流序列化流,HeaderHandler 处理程序,布尔 fCheck,布尔 isCrossAppDomain,IMethodCallMessage methodCallMessage)。 Remoting.Channels.CrossAppDomainSink.DoDispatch(Byte[] reqStmBuff, SmuggledMethodCallMessage smuggledMcm,SmuggledMethodReturnMessage& smuggledMrm) 在 System.Runtime.Remoting.Channels.CrossAppDomainSink.DoTransitionDispatchCallback(Object[] args) 在 [0] 处重新抛出异常:在 System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) 在 System. Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) at System.AppDomain.get_Id() at .DoCallBackInDefaultDomain(IntPtr function, Void* cookie) at .DefaultDomain.Initialize() at .LanguageSupport.InitializeDefaultAppDomain(LanguageSupport* ) 在 .LanguageSupport._Initialize(LanguageSupport* ) 在 .LanguageSupport。初始化(语言支持*)内部异常:

0 投票
1 回答
771 浏览

c# - 在 Web 或 Worker 角色之外引用 Microsoft.WindowsAzure.ServiceRuntime

我有一个场景,我需要能够使用Microsoft.WindowsAzure.ServiceRuntimeWeb/Worker 角色的外部。

具体来说,我有以下代码

此代码在事件中运行时成功执行,RoleEntryPoint.OnStart但是当我尝试在通过 Azure 启动任务触发的单独 exe 中执行此代码时

我收到以下错误

The type initializer for 'Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment' threw an exception.

有人可以确认是否可以在 Web 或 Worker 角色之外引用这个库?如果是这样,请就我可能做错的事情提供任何建议?

0 投票
2 回答
263 浏览

c# - 确定其他角色实例是否忙碌和/或正在恢复?

基于 StackOverflow 上的这个问题/答案,我希望让单个 Azure 实例一次运行某些代码,而不是让每个实例都运行代码。

但是,我似乎找不到的是如何确定仍在工作的角色RoleEnvironment.CurrentRoleInstance.Role.Instances是否忙碌和/或正在康复。如果一个实例失败,我需要它来将运行我的代码的控制权移交给另一个实例。

RoleInstance似乎没有任何属性来确定当前角色状态。

0 投票
4 回答
2794 浏览

c# - 检测 .NET 应用程序是在 Azure 还是在非 Azure 环境中运行

我们目前正在将我们应用程序的一些实例移至 Azure,但仍将保持与非 Azure 托管的现有实例的向后兼容性。

有没有在非 Azure 生产服务器上不安装 SDK 的情况下检测环境的好方法?

我试过使用:

来自 Microsoft.WindowsAzure.ServiceRuntime,它可以在本地和 Azure 中完美运行。但是,我需要将 Microsoft.WindowsAzure.ServiceRuntime.dll 设置为 CopyLocal,即使这样我得到:

无法加载文件或程序集 'msshrtmi, Version=2.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 或其依赖项之一

好像没有NuGet包,也不想手动复制一下msshrtmi dll。

也许有一种方法可以在不依赖 Microsoft.WindowsAzure.ServiceRuntime 的情况下进行检测?

0 投票
1 回答
780 浏览

.net - 如何从 Azure 创建的虚拟机中确定外部终结点?

我有一个服务器应用程序(一个侦听 TCP 端口的 .NET 控制台应用程序),我需要在 Azure VM 而不是 Worker 或 Web 角色中运行,我需要该应用程序能够确定其自己的公共/互联网端点 IP 和端口(例如,在通过管理门户创建 VM 时创建/分配的)。应用程序侦听的内部 TCP 端口在所有 VM 上都是相同的,但每个 VM 实例的外部/互联网端口显然是唯一的(我没有使用 Azure 负载均衡器)。

我尝试修改我的 .NET 控制台应用程序以尝试使用 确定主机虚拟机的公共 IP 地址和端口RoleEnvironment.CurrentRoleInstance.InstanceEndpoints[i].IPEndpoint,但RoleEnvironment.CurrentRoleInstance抛出异常(“角色发现数据不可用”)并且RoleEnvironment.IsAvailable始终为false. 文档说这应该是可能的:

RoleEnvironment 类可用于 Azure 角色之外的 Azure VM 中的独立组件。这些组件可以是可以通过例如远程进入角色实例并从命令行启动组件来运行的程序。这些进程必须以提升的权限运行才能访问 RoleEnvironment 类。

我正在通过远程桌面到 VM 运行我的控制台应用程序,然后右键单击我的 .exe 并选择以管理员身份运行,但仍然RoleEnvironment.IsAvailablefalse. 我是否需要以某种方式将 Windows Azure 集成组件安装到 VM 上?在线上的所有链接都谈到了在准备托管在 Azure 中的 Hyper-V 虚拟机时在 Hyper-V 中执行此操作;但在这种情况下,我从一开始就直接在 Azure 中创建 VM,方法是使用管理门户并选择默认的 Windows Server 2012 R2 Datacenter 映像。我不知道在这种情况下如何安装它们,或者它是否仍然受支持(大多数关于 Windows Azure 集成组件的链接来自 2011 年)。

所以最终的问题是:在 Azure VM 中运行的独立应用程序如何确定该 VM 的公共终结点?

0 投票
0 回答
493 浏览

c# - RoleEnvironment Changed 事件未在非默认 AppDomain 中触发

我正在运行在单独的 AppDomain 中托管代码的 Azure 服务。我需要处理这些 AppDomain 中的服务配置更改。为此,我正在监听RoleEnvironment.Changed事件。

但是,此事件仅在默认 AppDomain 中触发,而不在任何其他 AppDomain 中触发。但是,我可以通过在所有 AppDomain 中调用RoleEnvironment.GetConfigurationSettingValue来获取最新值。

我错过了什么,还是这是设计上的限制?

我需要让它工作,所以我认为我需要开发一个解决方法,其中只有默认的 AppDomain 监听Changed事件,然后使用一些基本的 IPC 将任何更改传达给其他 AppDomain。有没有人有更好的解决方法?

我创建了一个示例服务来说明我的问题:

我在 Azure Compute Emulator 中运行此服务并用于csrun.exe更新MySetting值:

使用 CSRUN.EXE 更新设置

这是我在计算模拟器中看到的:

Azure Compute Emulator 中的跟踪输出

我还在 Windows Azure 上的实际部署中对此进行了测试,结果相同。

我真的没有看到任何原因(如果是设计使然的话),所以我认为这可能是一个错误。

我发现RoleEnvironment.InitializeCallbacks用于为Changed事件注册回调的内部方法每个进程只调用一次,而不是每个 AppDomain 调用一次。

只需执行以下操作即可通过公共RoleRuntimeBridge类调用此方法:Microsoft.WindowsAzure.ServiceRuntime.Implementation.Loader

但是,只有最后一个执行此操作的 AppDomain 才会触发事件。因此,虽然这使我能够在“子”AppDomain 中触发事件,但它们不再在默认 AppDomain 中触发。

原因似乎是原生基础设施函数WaRegisterCallback只支持每个进程和回调类型一个回调。

任何帮助或指针都会被应用!

我已针对此问题在 Microsoft Connect 上提交了一个错误。

0 投票
3 回答
1903 浏览

azure - Azure Autoscale 重新启动正在运行的实例

我一直在使用 Autoscale 在 2 和 1 个云服务实例之间切换,以降低成本。这主要是有效的,除了有时(不确定这里的模式似乎是什么),扩展(1->2)的行为会导致两个实例进行回收,从而为用户产生服务中断。

假设 RoleEntry 响应拓扑变化没有任何花哨的事情发生,为什么要从 1->2 缩放重新启动已经运行的实例?

补充说明:

  • 通过查看管理门户中的实例选项卡,很明显这两个实例都在回收。中断也可以通过点击公共站点来确认。
  • 它不会始终如一地发生,但我不确定模式是什么。感觉就像当 1-instance 配置已经运行了多天时,尝试扩大回收两者。但是,如果 1-instance 配置仅运行了几个小时,您可以在不中断的情况下进行扩展和缩减。
  • 第一个实例的返回速度总是比引入的第二个实例快得多。