首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向WebRequest注册自定义协议

向WebRequest注册自定义协议
EN

Stack Overflow用户
提问于 2013-06-21 14:35:34
回答 1查看 680关注 0票数 5

我访问的web服务器需要自定义协议,而不是url中的http。我已经尝试注册我的协议,但是没有太多关于如何让它工作的文档。web服务器提供标准的HTTP响应,但是如果请求的前缀不是custom://而不是http://,,它将无法工作。我只想使用WebRequest底层功能,因为这最终是超文本传输协议,但是,我需要一种方法来提交请求与我的自定义协议url。我这样注册它:

代码语言:javascript
复制
WebRequest.RegisterPrefix("custom", new CustomWebRequestCreator());

但是,当我创建一个WebRequest时,当它在下面的代码之后返回我的自定义类时:

代码语言:javascript
复制
Uri uri = new Uri("custom://192.168.0.122:94934/resource");
System.Net.WebRequest request = WebRequest.Create(uri);

调试器说请求实际上是我的自定义类,但是随后我得到了这个异常:

代码语言:javascript
复制
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()而不注册前缀时,我得到了这个异常:

代码语言:javascript
复制
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)
   ...

你知道我该怎么做吗?

EN

回答 1

Stack Overflow用户

发布于 2015-01-23 11:46:18

这似乎是不可能的,或者说将达到从头为WebRequest重新实现HTTP的复杂程度。

我建议您改为创建一个TCP中继,您可以使用WebRequest [http://localhost/resource]连接到该中继,以便在不尝试扭曲WebRequest的情况下使其工作。中继将依次转发到TCP套接字192.168.0.122:94934。

对于中继,您可以使用通用的简化WebRequest对象。如果它用于控制台/webforms应用程序,那么当应用程序启动时,可以在另一个线程上启动中继(或者可以异步启动)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17229042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档