2013-06-21 115 views
5

我正在訪問需要自定義協議而不是http中的http的網絡服務器。我試圖註冊我的協議,但沒有太多的文件如何讓這個工作。 Web服務器提供標準的HTTP響應,但如果請求不是以custom://而不是http://作爲前綴,則不起作用。我想直接使用WebRequest底層功能,因爲這最終是HTTP,但是,我需要一種方法來使用自定義協議網址提交請求。我註冊這樣的:使用WebRequest註冊自定義協議

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

但後來,當我去創造一個WebRequest的,雖然這個代碼後返回我的自定義類:

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

調試器說,請求實際上我是自定義類,但後來我得到這個異常:

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

當我嘗試我的網址只是傳遞對WebRequest.Create()而無需註冊前綴,我得到這個異常:

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

任何想法我可能會得到這個工作?

回答

0

似乎不可能,或將達到從頭開始爲WebRequest重新實現HTTP的複雜程度。

我建議你改爲創建一個TCP中繼,然後使用WebRequest連接到該中繼,以便在不嘗試扭曲WebRequest的情況下工作。中繼將轉而轉發到TCP套接字192.168.0.122:94934。

使用中繼,您可以使用通用和簡化的WebRequest對象。如果是用於控制檯/ webforms應用程序,則可以在啓動應用程序時在其他線程上啓動中繼(或者可以異步啓動)。