我访问的web服务器需要自定义协议,而不是url中的http。我已经尝试注册我的协议,但是没有太多关于如何让它工作的文档。web服务器提供标准的HTTP响应,但是如果请求的前缀不是custom://而不是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()
...当我尝试只将我的网址传递给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)
...你知道我该怎么做吗?
发布于 2015-01-23 11:46:18
这似乎是不可能的,或者说将达到从头为WebRequest重新实现HTTP的复杂程度。
我建议您改为创建一个TCP中继,您可以使用WebRequest [http://localhost/resource]连接到该中继,以便在不尝试扭曲WebRequest的情况下使其工作。中继将依次转发到TCP套接字192.168.0.122:94934。
对于中继,您可以使用通用的简化WebRequest对象。如果它用于控制台/webforms应用程序,那么当应用程序启动时,可以在另一个线程上启动中继(或者可以异步启动)。
https://stackoverflow.com/questions/17229042
复制相似问题