Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# HttpWebRequest正在初始化-从未收到响应_C#_.net_Httpwebrequest_Windows Phone 7_Httpwebresponse - Fatal编程技术网

C# 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

我目前正在为WindowsPhone7开发一个应用程序的实现,该应用程序应该能够检索SHOUTcast流(灵感来源于)。流位置由IP地址和端口表示

以下是SHOUTcast流URL的示例:

我正在尝试进行HttpWebRequest以从流中获取数据:

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同步下载数据-只有异步调用可用。