C# HttpWebRequest正在初始化-从未收到响应
我目前正在为WindowsPhone7开发一个应用程序的实现,该应用程序应该能够检索SHOUTcast流(灵感来源于)。流位置由IP地址和端口表示 以下是SHOUTcast流URL的示例: 我正在尝试进行HttpWebRequest以从流中获取数据:C# HttpWebRequest正在初始化-从未收到响应,c#,.net,httpwebrequest,windows-phone-7,httpwebresponse,C#,.net,Httpwebrequest,Windows Phone 7,Httpwebresponse,我目前正在为WindowsPhone7开发一个应用程序的实现,该应用程序应该能够检索SHOUTcast流(灵感来源于)。流位置由IP地址和端口表示 以下是SHOUTcast流URL的示例: 我正在尝试进行HttpWebRequest以从流中获取数据: HttpWebRequest请求=(HttpWebRequest)WebRequest.Create(“http://78.159.104.183:80) 初始化请求后,我将尝试通过异步回调获取响应: request.BeginGetRespon
HttpWebRequest请求=(HttpWebRequest)WebRequest.Create(“http://78.159.104.183:80)
初始化请求后,我将尝试通过异步回调获取响应:
request.BeginGetResponse(new AsyncCallback(GetShoutAsync), request);
GetShoutAsync如下所示:
void GetShoutAsync(IAsyncResult res)
{
HttpWebRequest request = (HttpWebRequest)res.AsyncState;
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(res);
}
当我构建项目并运行它时,它会到达初始化请求的点,但是回调是从未调用过的
我注意到一件有趣的事情——SHOUTcast实现了一种技术,当用户尝试导航到流URL时,服务器会检测到用户代理,如果它是web浏览器,它只会显示HTML页面,而不是传递应用程序/octet流内容
如果在流URL的末尾使用斜杠和分号,您仍然可以直接接收流:
然而,在我的应用程序中,我无法得到响应-回调似乎永远无法到达。我试图通过将用户代理直接传递给HttpWebRequest来伪造它:
request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.3) Gecko/20100401 Mozilla/5.0 (X11; U; Linux i686; it-IT; rv:1.9.0.2) Gecko/2008092313 Ubuntu/9.25 (jaunty) Firefox/3.8";
这适用于简单流URL(末尾没有分号)来获取HTML内容,但我无法获取二进制流
有没有人遇到过类似的情况,或者知道是什么原因导致了这种情况?鉴于Shoutcast“HTTP”的脆弱性,打开它可能会有所帮助 当你把代码放到普通网页上时,它能工作吗 编辑 这看起来是一个很好的线索:也许您需要设置为false: 调用来自
BeginGetResponse
方法的回调时,AllowReadStreamBuffering
属性会产生影响。当AllowReadStreamBuffering
属性为true
时,一旦整个流下载到内存中,就会引发回调。当AllowReadStreamBuffering
属性为false
时,一旦流可用于读取(可能在所有数据到达之前),就会引发回调
默认设置为
true
。这意味着您永远不会点击回调,因为下载永远不会结束(如果下载时间足够长,您可能会耗尽内存)。将其设置为false
鉴于Shoutcast“HTTP”的脆弱性,打开它可能会有所帮助
当你把代码放到普通网页上时,它能工作吗
编辑
这看起来是一个很好的线索:也许您需要设置为false:
调用来自BeginGetResponse
方法的回调时,AllowReadStreamBuffering
属性会产生影响。当AllowReadStreamBuffering
属性为true
时,一旦整个流下载到内存中,就会引发回调。当AllowReadStreamBuffering
属性为false
时,一旦流可用于读取(可能在所有数据到达之前),就会引发回调
默认设置为
true
。这意味着您永远不会点击回调,因为下载永远不会结束(如果下载时间足够长,您可能会耗尽内存)。将其设置为false
我不知道这是否适用于您,但我遇到了相同的问题
并显式设置
request.AllowReadStreamBuffering=false;
request.Method=“GET”
似乎不管什么原因我的电话被解雇了
我不知道为什么。我不知道这对你是否有效,但我也有同样的问题 并显式设置 request.AllowReadStreamBuffering=false; request.Method=“GET” 似乎不管什么原因我的电话被解雇了
我不知道为什么。是的,它适用于普通网页。另一方面,Windows Phone 7上不提供UseUnsafeHeaderParsing。没有例外吗?假设您尝试WebRequest的同步副本?它只是挂起来了吗?没有例外。不,它不会挂起应用程序-它只是从不执行回调中的代码。对不起,我的意思是,如果您与回调同步而不是异步,那么代码是挂起、抛出还是继续?这可能为异步版本的问题所在提供了线索。对于Windows Phone 7应用程序,您无法通过WebRequest或HttpWebRequest同步下载数据-只有异步调用可用。是的,它适用于普通网页。另一方面,Windows Phone 7上不提供UseUnsafeHeaderParsing。没有例外吗?假设您尝试WebRequest的同步副本?它只是挂起来了吗?没有例外。不,它不会挂起应用程序-它只是从不执行回调中的代码。对不起,我的意思是,如果您与回调同步而不是异步,那么代码是挂起、抛出还是继续?这可能为异步版本的问题所在提供了线索。对于Windows Phone 7应用程序,您无法通过WebRequest或HttpWebRequest同步下载数据-只有异步调用可用。