我试图从MNS获取推送通知的访问令牌,每次WebRequest.GetRequestStreamAsync()
方法超时。有什么建议吗?
参考:http://msdn.microsoft.com/en-us/library/windows/apps/hh913756.aspx
以下是我使用的代码
HttpWebRequest webRequest = (HttpWebRequest)HttpWebRequest.Create("https://login.live.com/accesstoken.srf");
webRequest.Method = "POST";
webRequest.ContentType = "application/x-www-form-urlencoded";
string postString = String.Format("grant_type=client_credentials&client_id={0}&client_secret={1}&scope=notify.windows.com",
SID,
SECRET_KEY);
byte[] data = Encoding.UTF8.GetBytes(postString);
Stream newStream = await webRequest.GetRequestStreamAsync();
newStream.Write(data, 0, data.Length);
答案 0 :(得分:1)
尝试重写它,看看它是否有所作为。我有时遇到HttpWebRequest的问题,其中WebRequest工作正常。还要确保关闭你的溪流。
WebRequest webRequest = WebRequest.Create("https://login.live.com/accesstoken.srf");
webRequest.Method = "POST";
webRequest.ContentType = "application/x-www-form-urlencoded";
string postString = String.Format("grant_type=client_credentials&client_id={0}&client_secret={1}&scope=notify.windows.com",
SID,
SECRET_KEY);
byte[] data = Encoding.UTF8.GetBytes(postString);
Stream newStream = await webRequest.GetRequestStreamAsync();
newStream.Write(data, 0, data.Length);
newStream.Close();
WebResponse response = webRequest.GetResponse();
StreamReader requestReader = new StreamReader( response.GetResponseStream() );
string webResponse = requestReader.ReadToEnd();
response.Close();
答案 1 :(得分:1)
在Async方法上调用.ConfigureAwait(false)
。
这blog post应解释原因和方法。
答案 2 :(得分:1)
我们遇到了同样的问题,结果证明这是一个问题,而不是原本猜测的问题。
您需要.Dispose()或至少.Close()您从.GetResponseAsync获得的响应,否则下一次调用.GetRequestStreamAsync会挂起。< / p>
这背后的代码似乎拥有一些有限(相当低)的套接字或锁定数量,在前一个请求完成之前不允许进一步的请求甚至开始。