- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我再次遇到 PCL(可移植类库)中的 WebRequest 问题。
我有这段代码:
static ManualResetEvent allDone = new ManualResetEvent(false);
static string doc;
static public void AddAnime(string encodedLogin, string id, int episodes, int status, int score)
{
if (string.IsNullOrEmpty(encodedLogin))
{
throw new ArgumentException();
}
else
{
doc = String.Format("anime_id={0}&status={1}&episodes={2}&score={3}", id, "watching", episodes, score);
HttpWebRequest request = HttpWebRequest.CreateHttp("http://mal-api.com/animelist/anime");
request.Method = "POST";
request.Headers["Authorization"] = encodedLogin;
request.BeginGetRequestStream(new AsyncCallback(GetRequestCallBack), request);
allDone.WaitOne();
s.ToString();
}
}
static private void GetRequestCallBack(IAsyncResult aResult)
{
HttpWebRequest request = (HttpWebRequest)aResult.AsyncState;
Stream postStream = request.EndGetRequestStream(aResult);
byte[] byteArray = Encoding.UTF8.GetBytes(doc);
postStream.Write(byteArray, 0, doc.Length);
postStream.Flush();
request.BeginGetResponse(new AsyncCallback(GetResponseCallback), request);
}
static private void GetResponseCallback(IAsyncResult asyncResult)
{
HttpWebRequest request = (HttpWebRequest)asyncResult.AsyncState;
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asyncResult);
Stream dataStream = response.GetResponseStream();
StreamReader streamReader = new StreamReader(dataStream);
string responseString = streamReader.ReadToEnd();
//Do something with string here
allDone.Set();
}
现在,问题是,当我在示例控制台应用程序中调用 AddAnime
时,它运行得非常好,但是当我从我的 WP8 设备或模拟器 (WXGA) 调用它时,它卡在了开始获取响应
。它根本不会进入 GetResponseCallback
(使用断点进行测试),并且不会在 BeginGetResponse
之后直接继续任何代码。我已经等了两分多钟,应该会抛出一个 TimeOutException
(我认为),但即便如此,也什么都没有发生。
我测试了:
对于我的 PCL,我的目标是:
我该如何解决这个问题? PCL 不是用来保证交叉兼容性的吗?
最佳答案
Windows Phone(我认为还有 Silverlight)明确阻止您在 UI 线程上等待网络操作的结果。您需要将线程的控制权返回给调用者 - 如果您试图阻塞它,那么您就会死锁。
最简单的方法是使用 Tasks 和 async/await。我们发布了 Async Targeting Pack它将此支持添加到您所针对的平台(以及针对它们的可移植类库)。注意,不支持Windows Phone 7.0,需要选择Windows Phone 7.1/7.5(都是一样的,不同地方版本号不同)。
关于c# - WP8 上的 HttpWebRequest.BeginGetResponse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13847862/
我需要对 Web 资源发出异步请求并使用此页面 (link to full example) 中的示例: HttpWebRequest myHttpWebRequest= (HttpWebReques
这是我的代码: namespace RequestApi { public partial class MainPage : PhoneApplicationPage {
因此,我正在创建一个使用HTTP API来获取约50,000个帐户中每个帐户状态的应用程序。该代码循环遍历每个帐户,并为其发送HTTP请求。当我根据某些条件收到http请求的响应时,将创建一个新线程来
我无法按照示例获取回调。 我有以下代码: private void startWebRequest(object sender, EventArgs e) { Uri url
我在任务工厂内部调用 httpwebresponse,执行 1 次后抛出异常 无法在上一个调用仍在进行时重新调用 BeginGetRequestStream/BeginGetResponse 我的代码
我想使用 BeginGetResponse 方法来调用列表中的许多 URL。我有 2 个关于如何实现这个的问题: 根据 http://msdn.microsoft.com/en-us/library/
我遇到这样一种情况,我需要通过 Web 请求发送自定义值,以便我可以在我的应用程序收到的响应中使用它。因为我的应用程序可能会发送多个请求,所以我正在使用 BeginGetResponse异步发送每个请
我正在尝试异步发出网络请求。我的代码工作正常,除了一件事:似乎没有内置方法可以在 BeginGetResponse 上指定超时。 MSDN 示例清楚地显示了一个工作示例,但其缺点是它们最终都以 Som
我正在编写一个 Windows Phone 8 应用程序,它应该向服务器发送 GET+POST 请求并解析答案。 我用来发送请求和获取响应的代码如下(它写在一个单独的静态类中):
我再次遇到 PCL(可移植类库)中的 WebRequest 问题。 我有这段代码: static ManualResetEvent allDone = new ManualResetEvent
我正在使用 HttpWebRequest 调用网络服务。如果 BeginGetResponse 的 AsyncCallback 抛出错误,我想将它传播到我的主程序流。我在执行此操作时遇到了问题,因为错
HttpWebRequest.BeginGetResponse 不遵守 HttpWebRequest 的任何超时属性(Timeout 或 ReadWriteTimeout)。 我阅读了一些方法来获得相
我正在高负载下测试 ASP.NET (.NET 4) 网络应用程序,发现在某些情况下 HttpWebRequest.BeginGetResponse() 会同步完成,不会抛出任何异常。 在高负载下在多
我有以下代码: private void GetRequestStreamCallback(IAsyncResult asynchronousResult) {
我在我的代码调用中使用 HttpWebRequest.BeginGetResponse() 方法从我的服务器获取数据。服务器生成的内容范围可能从几 KB 到几 GB。 我的问题是 HttpWebReq
我想知道这两种方法中哪种方法更好?我需要创建一个 200 毫秒到 5 秒之间的 Web 请求。我需要 html 响应才能继续 - 所以需要在主线程上阻塞。 第一种方法 string GetRespon
我正在使用一个使用 web 服务来推送一些事件的客户端 - web 服务的设计是这样的,即在客户端发布订阅命令时,它会发回一些感兴趣的事件并继续这样做只要客户端保持连接。 当 POST 命令时,服务会
目前在我们的一个应用程序中,我发现在执行第一个 HTTP Webrequest 时有很大的滞后。根据我们的日志,有 30 - 60 秒的延迟。它在 HttpWebRequest.BeginGetRes
我正在尝试异步获取 HttpWebResponse 对象,以便允许取消请求(使用 BackgroundWorker.CancellationPending 标志)。但是,下面的 request.Beg
我想在 UI 上显示下载正在进行时下载文件。使用 WebRequest 我有两个选择: 使用 WebRequest.BeginGetResponse 和相关方法。 优点:可以以字节为单位显示准确的进度
我是一名优秀的程序员,十分优秀!