c# - Apple Valiidating Receipt Exeption(现有连接被远程主机强行关闭)
问题描述
我在验证我的沙盒收据时遇到问题。设备将收据发送到我的 Azure App Service,后者向 Apple Receipt Vaildation 服务器发出 POST 请求。但是,在大约 50% 的请求中,我收到一条错误消息:
System.Net.WebException: The SSL connection could not be established, see inner exception. Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host. ---> System.Net.Http.HttpRequestException: The SSL connection could not be established, see inner exception. ---> System.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host
其他 50% 确实可以正常工作。
C# 代码:
[HttpPost("{isSandbox}")]
public bool Post(bool isSandbox, [FromBody] myReceipt myReceipt)
{
try
{
var json = new JObject(new JProperty("receipt-data", myReceipt.ReceiptString),
new JProperty("password", myReceipt.Password),
new JProperty("exclude-old-transactions", "true")).ToString();
ASCIIEncoding ascii = new ASCIIEncoding();
byte[] postBytes = Encoding.UTF8.GetBytes(json);
var url = "https://buy.itunes.apple.com/verifyReceipt";
if(isSandbox)
{
url = "https://sandbox.itunes.apple.com/verifyReceipt";
}
var request = WebRequest.Create(url);
request.Method = "POST";
request.ContentType = "application/json";
request.ContentLength = postBytes.Length;
using (var stream = request.GetRequestStream())
{
stream.Write(postBytes, 0, postBytes.Length);
stream.Flush();
}
var sendresponse = request.GetResponse();
string sendresponsetext = "";
using (var streamReader = new StreamReader(sendresponse.GetResponseStream()))
{
sendresponsetext = streamReader.ReadToEnd().Trim();
}
var responseObject = JsonConvert.DeserializeObject<responseBody>(sendresponsetext);
if (responseObject.Latest_receipt_info[0].Expires_date == null)
{
return false;
}
DateTime expireDate = Convert.ToDateTime(responseObject.Latest_receipt_info[0].Expires_date.Replace(" Etc/GMT", ""));
if (expireDate >= DateTime.Now || responseObject.Latest_receipt_info[0].Is_trial_period == "true")
{
// User has premium
return true;
}
return false;
}
catch (Exception error)
{
telemetry.TrackEvent("Exeption: " + error);
return false;
}
}
这段代码大部分来自:使用 C# 在应用购买收据中验证 iOS
问题是对我来说它不是 100% 可靠的。知道为什么会这样吗?这仅发生在沙盒验证中吗?
解决方案
推荐阅读
- c++ - 进入 C++ 第 17 章问题 4 - 二叉树
- javascript - 使用 dangerouslySetInnerHTML 在 React 中插入完整的 HTML
- c++ - 为什么我的结构在包含字符串时会崩溃?
- jenkins - 由于读取超时,Jenkins 插件管理器无法安装/更新插件
- reactjs - 粘贴文件在剪贴板中不起作用(更新->关于剪贴板权限)
- c# - EF Core (3.1) 工具:有没有办法将数据库降级到之前的迁移?
- python - 已安装 lxml 但仍有“ImportError: lxml not found, please install it”错误
- android - Unity - 2019.3 Mobile Android APK 加载失败
- java - 关系实体的 Spring Data Neo4j 存储库
- ruby-on-rails - 不能为隐藏属性输入标签的值赋值