2010-04-02 25 views
7

Sto cercando di utilizzare C# e HttpListener con un prefisso di qualcosa di diverso da localhost e viene a mancare (cioè se lo do , vale a dire.NET HttpListener problema prefisso con qualcosa di diverso localhost

http://localhost:1234 opere, ma

http://server1:1234 fallisce

Il codice è ...

HttpListener listener = new HttpListener(); 
String prefix = @"http://server1:1234"; 
listener.Prefixes.Add(prefix); 
listener.Start(); 

Il failu si verifica su listener.Start() con un'eccezione di Access is denied..

risposta

3

L'app è in esecuzione con privilegi elevati?

I conti normali non possono agganciare la pipeline Http senza prima effettuare una prenotazione.

http://msdn.microsoft.com/en-us/library/Aa364673

Si può fare programatically al momento dell'installazione. Fammi sapere se questo è interessante, e io estrarrò del codice.

EDIT:

In realtà, come non riesco a identificare dove il codice è venuto da in questo momento, non posso postare qui. C'è uno codeplex project for doing this kind of thing che vale sicuramente la pena scegliere.

/EDIT

Ecco un modo fare la prenotazione nella riga di comando:

http://www.casadehambone.com/HowToAddAURLACLAndAvoidAddressAccessDeniedExceptionInWindowsVista.aspx

+1

Sotto-domanda: si può contare su non dover fare una prenotazione per 'http: // localhost: { porta}/'? Su Win7, sono in grado di ascoltare sulla porta senza riservare, ma ho già installato un sacco di cose e non ho testato su Windows 7 di serie. Inoltre, chiedendo quale sia la politica su Windows Vista e Windows XP SP2. Sarei entusiasta se localhost fosse un caso speciale di cui non dovevo preoccuparmi. –

8

Ho avuto lo stesso problema una volta e ho risolto con l'aggiunta di una prenotazione URL per lo spazio dei nomi URL specificato per un utente/utente alla Network Shell (netsh). Ecco un esempio su come Reserv un URL per ogni utente, eseguire questo nel prompt dei comandi come amministratore:

netsh http add urlacl url=http://server1:1234/ user=Everyone 

Ecco un esempio di come Reserv un URL per un utente, eseguire questo nel prompt dei comandi come amministratore:

netsh http add urlacl url=http://server1:1234/ user=Steve 

In questo modo non è necessario per eseguire l'applicazione come amministratore

+0

Cosa fa questo in realtà? 'netsh http aggiungi urlacl url = http: // server1: 1234 /' È come usare il file hosts? –

+0

@RoyiNamir No, la shell di rete ('netsh') è un'utilità della riga di comando che consente di configurare e visualizzare lo stato di vari ruoli e componenti del server di comunicazioni di rete. 'http aggiungere urlacl url = http: // server1: 1234 /' riserva l'URL specificato per utenti e account non amministratori. In questo caso, 'utente = Everyone' per ogni account. – ClydeFrog

Problemi correlati