2013-06-21 12 views
5

Accedo a un server Web che richiede un protocollo personalizzato anziché http nell'URL. Ho provato a registrare il mio protocollo, ma non c'è molta documentazione su come farlo funzionare. Il server web offre risposte HTTP standard, ma se la richiesta non è preceduta da custom: // invece di http: //, non funzionerà. Vorrei semplicemente utilizzare la funzionalità di base di WebRequest poiché questo è in definitiva HTTP, tuttavia, ho bisogno di un modo per inviare la richiesta con il mio URL di protocollo personalizzato. Mi iscrivo in questo modo:Registro Protocollo personalizzato con WebRequest

WebRequest.RegisterPrefix("custom", new CustomWebRequestCreator()); 

Ma poi, quando vado a creare una WebRequest, mentre ritorna la mia classe personalizzato dopo questo codice:

Uri uri = new Uri("custom://192.168.0.122:94934/resource"); 
System.Net.WebRequest request = WebRequest.Create(uri); 

Il debugger dice che la richiesta è in realtà il mio classe personalizzata, ma poi ottengo questa eccezione:

System.NotImplementedException was unhandled 
    HResult=-2147467263 
    Message=This method is not implemented by this class. 
    Source=System 
    StackTrace: 
     at System.Net.WebRequest.GetResponse() 
... 

Quando provo a passare solo il mio URL WebRequest.Create() senza registrare il prefisso, ottengo questa eccezione:

System.NotSupportedException was unhandled 
    HResult=-2146233067 
    Message=The URI prefix is not recognized. 
    Source=System 
    StackTrace: 
     at System.Net.WebRequest.Create(Uri requestUri, Boolean useUriBase) 
     at System.Net.WebRequest.Create(Uri requestUri) 
    ... 

Qualche idea su come potrei farlo funzionare?

risposta

0

Non sembra possibile, o raggiungerebbe il livello di complessità della re-implementazione di HTTP per WebRequest da zero.

Suggerisco invece di creare un relay TCP, al quale ci si connette utilizzando WebRequest [http://localhost/resource], per farlo funzionare senza cercare di contortare WebRequest. Il relè avrebbe a sua volta in avanti il ​​socket TCP 192.168.0.122:94934.

Con un relè, si utilizza l'oggetto WebRequest comune e semplificato. Se è per un'applicazione di console/webform, il relay può essere avviato su un altro thread (o può essere avviato in modo asincrono), quando l'applicazione viene avviata.

Problemi correlati