使用 WebRequest 注册自定义协议

5

我正在访问一个需要使用自定义协议而非http的URL的Web服务器。虽然我尝试注册我的协议,但并没有太多关于如何使其工作的文档。该Web服务器提供标准的HTTP响应,但如果请求不以custom://而是以http://开头,它将无法正常工作。由于这最终仍然是HTTP,因此我希望只使用基础功能中的WebRequest,但我需要一种方法以我的自定义协议URL提交请求。我像这样进行注册:

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

当我尝试将我的URL直接传递给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)
   ...

有什么想法可以让这个工作起来吗?
1个回答

0

看起来似乎不可能,或者会达到重新从头实现 WebRequest 的 HTTP 的复杂程度。

我建议你创建一个 TCP 中继,通过 WebRequest 连接到它 [http://localhost/resource],以使其工作而不必试图扭曲 WebRequest。中继再转发到 TCP 套接字 192.168.0.122:94934。

有了中继,您可以使用常见且简化的 WebRequest 对象。如果是控制台/网络表单应用程序,则可以在启动应用程序时在另一个线程上启动(或可以异步启动)中继。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接