2012-03-30 41 views
0

我將我的C#控制檯應用程序遷移到Azure。我的應用程序使用HttpListener在特定端口上偵聽http請求。當我在一個Worker角色本地試試下面的測試代碼,我(在ComputeEmulator屏幕類似的打印出來)有一個例外,他說:開始監聽時工作角色中的HttpListenerException

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. 

我真的很感激你的幫助。

回答

0

雖然我對Azure瞭解不多,但我對http.sys/HttpListener瞭解得很少,所以這裏是我的嘗試:httpListener.Prefixes.Add(ur)失敗,除非進程在admin /用戶上下文。使Prefixes.Add()不失敗的另一種方法是事先使用ACL來ACL,使用netsh.exe實用程序或使用HttpAPI以編程方式,兩者都可以在管理員/提升的用戶上下文中運行。除非Azure操作環境爲您的代碼運行所在的用戶上下文的ACL提供ACL(授予訪問權限),否則您可能需要查找除使用HttpListener之外的其他選項。