【问题标题】:Nancy Self Host in Azure Worker RoleAzure 辅助角色中的 Nancy Self Host
【发布时间】:2016-10-27 06:16:11
【问题描述】:

我部署了一个 azure worker 角色,它运行一些计划任务作为集成系统的一部分。我正在尝试公开一个 http 端点,该端点将提供一些管理功能,以便我可以远程控制工作者角色的各个方面。

我有工作角色并且正在运行,唯一的问题是我无法从 Internet 访问 http 端点。

我已经确认 nancy 服务器正在运行,因为当我远程访问虚拟机时,我可以使用本地 IP 地址进行连接。

角色配置如下:

<ServiceDefinition name="Azure" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2015-04.2.6">
<WorkerRole name="Host.Azure" vmsize="Small">
<ConfigurationSettings>
  <Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" />
</ConfigurationSettings>
<Startup>
  <Task commandLine="mount.cmd" executionContext="limited" taskType="background">
  </Task>
</Startup>
<Endpoints>
  <InputEndpoint name="http" protocol="http" port="80" localPort="80" />
</Endpoints>
<LocalResources>
</LocalResources>
<Imports>
  <Import moduleName="RemoteAccess" />
  <Import moduleName="RemoteForwarder" />
</Imports>
</WorkerRole>
</ServiceDefinition>

我正在按如下方式创建 nancy url:

var endpointName = "http";
var instance = RoleEnvironment.CurrentRoleInstance;
var internalEndpoint = instance.InstanceEndpoints[endpointName];
var uri = new Uri($"{internalEndpoint.Protocol}://{internalEndpoint.IPEndpoint}");
return new NancyUri {Value = uri};

还有什么我需要做的才能让它工作吗?

【问题讨论】:

  • 你的 Uri 构造看起来很可疑,因为你正在抓取 .Protocol.IPEndpoint 下有你可能想要使用的属性(我现在不记得细节了)。

标签: azure nancy


【解决方案1】:

这与 windows url acl 配置有关。我以为是因为我向 nancy 主机提供本地 ip,所以它可以工作,但最后我必须在 http acl 中添加一个条目。

nancy url 是这样构建的

var uri = new Uri("http://localhost:80");
return new NancyUri {Value = uri};

我设置了一个任务来运行以下命令

netsh http add urlacl url="http://+:80/" user="Everyone"

csdef文件中的引用如下:

<Task commandLine="network.cmd" executionContext="elevated" taskType="background"></Task>

【讨论】:

    猜你喜欢
    • 2016-02-02
    • 1970-01-01
    • 2011-08-22
    • 2014-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多