开始侦听时,辅助角色中的HttpListenerException

时间:2012-03-30 07:07:48

标签: azure httplistener

我正在将我的C#控制台应用程序迁移到Azure。我的应用使用HttpListener来侦听特定端口上的http请求。当我在Worker角色中本地尝试以下测试代码时,我得到一个异常(在ComputeEmulator屏幕中类似的打印输出)说:

  

HttpListenerException - “进程无法访问该文件,因为它正由另一个进程使用”。

注意:我已在服务配置文件中将端口配置为2020。我还注意到从RoleEnvironment中检索到的端口显示2020,但是假设显示一个不同的端口,因为它应该重新映射到与配置的外部端口号不同的端口?

// ========== Test code starts ==============

string ipAddress = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["Ecard"].IPEndpoint.Address.ToString();
int port = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["Ecard"].IPEndpoint.Port;

string uri = @"http://" + ipAddress + ":" + port + "/";

try
{

    httpListener = new HttpListener();
    httpListener.Prefixes.Add(uri);
    httpListener.Start();

}
catch (Exception e)
{
    Trace.WriteLine(e.Message);
}

// Test code ends.

我真的很感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

虽然我对Azure知之甚少,但我对http.sys / HttpListener有一点了解,所以这是我的帮助尝试:httpListener.Prefixes.Add(ur)失败,除非进程在admin / raise用户中运行上下文。使Prefixes.Add()失败的另一种方法是使用netsh.exe实用程序或使用HttpAPI以编程方式预先对所讨论的URL进行ACL,这两种方法也可以在admin / raise用户上下文中运行。除非Azure操作环境对运行代码的用户上下文的URL执行ACL(授予访问权限),否则您可能需要查找除使用HttpListener之外的其他选项。