Azure云服务 - 拒绝访问(端口绑定)

时间:2015-05-28 08:27:20

标签: azure azure-worker-roles

我正在使用Visual Studio 2013将WorkerRole发布到Azure。 WorkerRole应该在端口80上绑定,并启动一个Owin WebApp:

WebApp.Start<Startup>(new StartOptions(url: baseUri));

如果我在Azure模拟器上本地运行它,一切都有效,但是当我在Azure上实时运行它时会失败。相关的例外是:

Inner Exception: Access is denied
   at System.Net.HttpListener.AddAllPrefixes()
   at System.Net.HttpListener.Start()
   at Microsoft.Owin.Host.HttpListener.OwinHttpListener.Start(HttpListener listener, Func`2 appFunc, IList`1 addresses, IDictionary`2 capabilities, Func`2 loggerFactory)
   at Microsoft.Owin.Host.HttpListener.OwinServerFactory.Create(Func`2 app, IDictionary`2 properties)

我尝试了RDP-ing到实例并添加了ACL规则,这些规则是本地计算机上常见的错误来源

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

但未成功,它仍然会出现相同的错误。

有没有人遇到过这个问题并且可以指出我正确的解决方向?

谢谢!

2 个答案:

答案 0 :(得分:2)

首先,使用带有80绑定的WorkerRole是奇怪的,而80端口可用的WebRole打开了。

下一步。您似乎尚未为WorkerRole定义输入端点,Azure防火墙会关闭所有端口。因此,要打开80端口,请尝试在ServiceDefinition.csdef文件或WorkerRole属性窗口中指定输入端点,&#34;端点&#34;标签。在发布到Azure时,它应该挂接此配置以打开端口。

简而言之,请尝试使用以下内容更新您的ServiceDefinition.csdef

<ServiceDefinition name="MyService" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
  <WorkerRole name="WorkerRole1">    
    <Endpoints>
      <InputEndpoint name="HttpIn" protocol="http" port="80" localPort="80" />
    </Endpoints>
  </WorkerRole>
</ServiceDefinition>

另请查看以下文档:Enable Communication for Role Instances in AzureWorkerRole SchemaHow to Configure Cloud Services

希望它有所帮助!

答案 1 :(得分:2)

事实证明我绑定了&#34; *:80&#34;而不是从配置中正确获取URI。因此,为Azure Worker绑定baseUri的正确方法是:

var endpoint = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["Endpoint1"];
string baseUri = String.Format("{0}://{1}", endpoint.Protocol, endpoint.IPEndpoint);

然后绑定:

WebApp.Start<Startup>(new StartOptions(url: baseUri));