2013-06-21 10 views
5

Ich greife auf einen Webserver zu, der ein benutzerdefiniertes Protokoll anstelle von http in der URL erfordert. Ich habe versucht, mein Protokoll zu registrieren, aber es gibt nicht viel Dokumentation darüber, wie man das zum Laufen bringt. Der Webserver bietet standardmäßige HTTP-Antworten, aber wenn die Anfrage nicht mit custom: // anstelle von http: // vorangestellt wird, funktioniert sie nicht. Ich möchte einfach die zugrunde liegende WebRequest-Funktionalität verwenden, da dies letztlich HTTP ist, jedoch brauche ich eine Möglichkeit, die Anfrage mit meiner benutzerdefinierten Protokoll-URL zu übermitteln. Ich melde mich es so:Registrieren benutzerdefiniertes Protokoll mit WebRequest

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

Aber dann, wenn ich eine WebRequest erstellen gehen, während es nach diesem Code meine benutzerdefinierte Klasse zurückgibt:

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

Der Debugger sagt, dass die Anforderung ist eigentlich mein benutzerdefinierte Klasse, aber dann bekomme ich diese Ausnahme:

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

Wenn ich versuche nur meine URL zu WebRequest.Create() übergeben, ohne das Präfix zu registrieren, bekomme ich diese Ausnahme:

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) 
    ... 

Irgendeine Idee, wie ich das zum Funktionieren bringen könnte?

Antwort

0

Es scheint nicht möglich zu sein, oder würde das Niveau der Komplexität erreichen, HTTP für WebRequest von Grund auf neu zu implementieren.

Ich schlage vor, dass Sie stattdessen ein TCP-Relay erstellen, das Sie mit WebRequest [http://localhost/resource] verbinden, damit es funktioniert, ohne WebRequest zu versuchen. Das Relais würde wiederum zum TCP-Socket 192.168.0.122:94934 weiterleiten.

Mit einem Relay verwenden Sie das allgemeine und vereinfachte WebRequest-Objekt. Wenn es für eine Konsole/Webforms-Anwendung ist, kann das Relay in einem anderen Thread gestartet werden (oder kann asynchron gestartet werden), wenn die Anwendung gestartet wird.

Verwandte Themen