WebRequestComponent.cs 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564
  1. //------------------------------------------------------------
  2. // Game Framework
  3. // Copyright © 2013-2021 loyalsoft. All rights reserved.
  4. // Homepage: http://www.game7000.com/
  5. // Feedback: http://www.game7000.com/
  6. //------------------------------------------------------------
  7. using GameFramework;
  8. using GameFramework.WebRequest;
  9. using System.Collections.Generic;
  10. using UnityEngine;
  11. namespace UnityGameFramework.Runtime
  12. {
  13. /// <summary>
  14. /// Web 请求组件。
  15. /// </summary>
  16. [DisallowMultipleComponent]
  17. [AddComponentMenu("Game Framework/Web Request")]
  18. public sealed class WebRequestComponent : GameFrameworkComponent
  19. {
  20. private const int DefaultPriority = 0;
  21. private IWebRequestManager m_WebRequestManager = null;
  22. private EventComponent m_EventComponent = null;
  23. [SerializeField]
  24. private Transform m_InstanceRoot = null;
  25. [SerializeField]
  26. private string m_WebRequestAgentHelperTypeName = "UnityGameFramework.Runtime.UnityWebRequestAgentHelper";
  27. [SerializeField]
  28. private WebRequestAgentHelperBase m_CustomWebRequestAgentHelper = null;
  29. [SerializeField]
  30. private int m_WebRequestAgentHelperCount = 1;
  31. [SerializeField]
  32. private float m_Timeout = 30f;
  33. /// <summary>
  34. /// 获取 Web 请求代理总数量。
  35. /// </summary>
  36. public int TotalAgentCount
  37. {
  38. get
  39. {
  40. return m_WebRequestManager.TotalAgentCount;
  41. }
  42. }
  43. /// <summary>
  44. /// 获取可用 Web 请求代理数量。
  45. /// </summary>
  46. public int FreeAgentCount
  47. {
  48. get
  49. {
  50. return m_WebRequestManager.FreeAgentCount;
  51. }
  52. }
  53. /// <summary>
  54. /// 获取工作中 Web 请求代理数量。
  55. /// </summary>
  56. public int WorkingAgentCount
  57. {
  58. get
  59. {
  60. return m_WebRequestManager.WorkingAgentCount;
  61. }
  62. }
  63. /// <summary>
  64. /// 获取等待 Web 请求数量。
  65. /// </summary>
  66. public int WaitingTaskCount
  67. {
  68. get
  69. {
  70. return m_WebRequestManager.WaitingTaskCount;
  71. }
  72. }
  73. /// <summary>
  74. /// 获取或设置 Web 请求超时时长,以秒为单位。
  75. /// </summary>
  76. public float Timeout
  77. {
  78. get
  79. {
  80. return m_WebRequestManager.Timeout;
  81. }
  82. set
  83. {
  84. m_WebRequestManager.Timeout = m_Timeout = value;
  85. }
  86. }
  87. /// <summary>
  88. /// 游戏框架组件初始化。
  89. /// </summary>
  90. protected override void Awake()
  91. {
  92. base.Awake();
  93. m_WebRequestManager = GameFrameworkEntry.GetModule<IWebRequestManager>();
  94. if (m_WebRequestManager == null)
  95. {
  96. Log.Fatal("Web request manager is invalid.");
  97. return;
  98. }
  99. m_WebRequestManager.Timeout = m_Timeout;
  100. m_WebRequestManager.WebRequestStart += OnWebRequestStart;
  101. m_WebRequestManager.WebRequestSuccess += OnWebRequestSuccess;
  102. m_WebRequestManager.WebRequestFailure += OnWebRequestFailure;
  103. }
  104. private void Start()
  105. {
  106. m_EventComponent = GameEntry.GetComponent<EventComponent>();
  107. if (m_EventComponent == null)
  108. {
  109. Log.Fatal("Event component is invalid.");
  110. return;
  111. }
  112. if (m_InstanceRoot == null)
  113. {
  114. m_InstanceRoot = new GameObject("Web Request Agent Instances").transform;
  115. m_InstanceRoot.SetParent(gameObject.transform);
  116. m_InstanceRoot.localScale = Vector3.one;
  117. }
  118. for (int i = 0; i < m_WebRequestAgentHelperCount; i++)
  119. {
  120. AddWebRequestAgentHelper(i);
  121. }
  122. }
  123. /// <summary>
  124. /// 根据 Web 请求任务的序列编号获取 Web 请求任务的信息。
  125. /// </summary>
  126. /// <param name="serialId">要获取信息的 Web 请求任务的序列编号。</param>
  127. /// <returns>Web 请求任务的信息。</returns>
  128. public GameFramework.TaskInfo GetWebRequestInfo(int serialId)
  129. {
  130. return m_WebRequestManager.GetWebRequestInfo(serialId);
  131. }
  132. /// <summary>
  133. /// 根据 Web 请求任务的标签获取 Web 请求任务的信息。
  134. /// </summary>
  135. /// <param name="tag">要获取信息的 Web 请求任务的标签。</param>
  136. /// <returns>Web 请求任务的信息。</returns>
  137. public GameFramework.TaskInfo[] GetWebRequestInfos(string tag)
  138. {
  139. return m_WebRequestManager.GetWebRequestInfos(tag);
  140. }
  141. /// <summary>
  142. /// 根据 Web 请求任务的标签获取 Web 请求任务的信息。
  143. /// </summary>
  144. /// <param name="tag">要获取信息的 Web 请求任务的标签。</param>
  145. /// <param name="results">Web 请求任务的信息。</param>
  146. public void GetAllWebRequestInfos(string tag, List<GameFramework.TaskInfo> results)
  147. {
  148. m_WebRequestManager.GetAllWebRequestInfos(tag, results);
  149. }
  150. /// <summary>
  151. /// 获取所有 Web 请求任务的信息。
  152. /// </summary>
  153. /// <returns>所有 Web 请求任务的信息。</returns>
  154. public GameFramework.TaskInfo[] GetAllWebRequestInfos()
  155. {
  156. return m_WebRequestManager.GetAllWebRequestInfos();
  157. }
  158. /// <summary>
  159. /// 获取所有 Web 请求任务的信息。
  160. /// </summary>
  161. /// <param name="results">所有 Web 请求任务的信息。</param>
  162. public void GetAllWebRequestInfos(List<GameFramework.TaskInfo> results)
  163. {
  164. m_WebRequestManager.GetAllWebRequestInfos(results);
  165. }
  166. /// <summary>
  167. /// 增加 Web 请求任务。
  168. /// </summary>
  169. /// <param name="webRequestUri">Web 请求地址。</param>
  170. /// <returns>新增 Web 请求任务的序列编号。</returns>
  171. public int AddWebRequest(string webRequestUri)
  172. {
  173. return AddWebRequest(webRequestUri, null, null, null, DefaultPriority, null);
  174. }
  175. /// <summary>
  176. /// 增加 Web 请求任务。
  177. /// </summary>
  178. /// <param name="webRequestUri">Web 请求地址。</param>
  179. /// <param name="postData">要发送的数据流。</param>
  180. /// <returns>新增 Web 请求任务的序列编号。</returns>
  181. public int AddWebRequest(string webRequestUri, byte[] postData)
  182. {
  183. return AddWebRequest(webRequestUri, postData, null, null, DefaultPriority, null);
  184. }
  185. /// <summary>
  186. /// 增加 Web 请求任务。
  187. /// </summary>
  188. /// <param name="webRequestUri">Web 请求地址。</param>
  189. /// <param name="wwwForm">WWW 表单。</param>
  190. /// <returns>新增 Web 请求任务的序列编号。</returns>
  191. public int AddWebRequest(string webRequestUri, WWWForm wwwForm)
  192. {
  193. return AddWebRequest(webRequestUri, null, wwwForm, null, DefaultPriority, null);
  194. }
  195. /// <summary>
  196. /// 增加 Web 请求任务。
  197. /// </summary>
  198. /// <param name="webRequestUri">Web 请求地址。</param>
  199. /// <param name="tag">Web 请求任务的标签。</param>
  200. /// <returns>新增 Web 请求任务的序列编号。</returns>
  201. public int AddWebRequest(string webRequestUri, string tag)
  202. {
  203. return AddWebRequest(webRequestUri, null, null, tag, DefaultPriority, null);
  204. }
  205. /// <summary>
  206. /// 增加 Web 请求任务。
  207. /// </summary>
  208. /// <param name="webRequestUri">Web 请求地址。</param>
  209. /// <param name="priority">Web 请求任务的优先级。</param>
  210. /// <returns>新增 Web 请求任务的序列编号。</returns>
  211. public int AddWebRequest(string webRequestUri, int priority)
  212. {
  213. return AddWebRequest(webRequestUri, null, null, null, priority, null);
  214. }
  215. /// <summary>
  216. /// 增加 Web 请求任务。
  217. /// </summary>
  218. /// <param name="webRequestUri">Web 请求地址。</param>
  219. /// <param name="userData">用户自定义数据。</param>
  220. /// <returns>新增 Web 请求任务的序列编号。</returns>
  221. public int AddWebRequest(string webRequestUri, object userData)
  222. {
  223. return AddWebRequest(webRequestUri, null, null, null, DefaultPriority, userData);
  224. }
  225. /// <summary>
  226. /// 增加 Web 请求任务。
  227. /// </summary>
  228. /// <param name="webRequestUri">Web 请求地址。</param>
  229. /// <param name="postData">要发送的数据流。</param>
  230. /// <param name="tag">Web 请求任务的标签。</param>
  231. /// <returns>新增 Web 请求任务的序列编号。</returns>
  232. public int AddWebRequest(string webRequestUri, byte[] postData, string tag)
  233. {
  234. return AddWebRequest(webRequestUri, postData, null, tag, DefaultPriority, null);
  235. }
  236. /// <summary>
  237. /// 增加 Web 请求任务。
  238. /// </summary>
  239. /// <param name="webRequestUri">Web 请求地址。</param>
  240. /// <param name="wwwForm">WWW 表单。</param>
  241. /// <param name="tag">Web 请求任务的标签。</param>
  242. /// <returns>新增 Web 请求任务的序列编号。</returns>
  243. public int AddWebRequest(string webRequestUri, WWWForm wwwForm, string tag)
  244. {
  245. return AddWebRequest(webRequestUri, null, wwwForm, tag, DefaultPriority, null);
  246. }
  247. /// <summary>
  248. /// 增加 Web 请求任务。
  249. /// </summary>
  250. /// <param name="webRequestUri">Web 请求地址。</param>
  251. /// <param name="postData">要发送的数据流。</param>
  252. /// <param name="priority">Web 请求任务的优先级。</param>
  253. /// <returns>新增 Web 请求任务的序列编号。</returns>
  254. public int AddWebRequest(string webRequestUri, byte[] postData, int priority)
  255. {
  256. return AddWebRequest(webRequestUri, postData, null, null, priority, null);
  257. }
  258. /// <summary>
  259. /// 增加 Web 请求任务。
  260. /// </summary>
  261. /// <param name="webRequestUri">Web 请求地址。</param>
  262. /// <param name="wwwForm">WWW 表单。</param>
  263. /// <param name="priority">Web 请求任务的优先级。</param>
  264. /// <returns>新增 Web 请求任务的序列编号。</returns>
  265. public int AddWebRequest(string webRequestUri, WWWForm wwwForm, int priority)
  266. {
  267. return AddWebRequest(webRequestUri, null, wwwForm, null, priority, null);
  268. }
  269. /// <summary>
  270. /// 增加 Web 请求任务。
  271. /// </summary>
  272. /// <param name="webRequestUri">Web 请求地址。</param>
  273. /// <param name="postData">要发送的数据流。</param>
  274. /// <param name="userData">用户自定义数据。</param>
  275. /// <returns>新增 Web 请求任务的序列编号。</returns>
  276. public int AddWebRequest(string webRequestUri, byte[] postData, object userData)
  277. {
  278. return AddWebRequest(webRequestUri, postData, null, null, DefaultPriority, userData);
  279. }
  280. /// <summary>
  281. /// 增加 Web 请求任务。
  282. /// </summary>
  283. /// <param name="webRequestUri">Web 请求地址。</param>
  284. /// <param name="wwwForm">WWW 表单。</param>
  285. /// <param name="userData">用户自定义数据。</param>
  286. /// <returns>新增 Web 请求任务的序列编号。</returns>
  287. public int AddWebRequest(string webRequestUri, WWWForm wwwForm, object userData)
  288. {
  289. return AddWebRequest(webRequestUri, null, wwwForm, null, DefaultPriority, userData);
  290. }
  291. /// <summary>
  292. /// 增加 Web 请求任务。
  293. /// </summary>
  294. /// <param name="webRequestUri">Web 请求地址。</param>
  295. /// <param name="tag">Web 请求任务的标签。</param>
  296. /// <param name="priority">Web 请求任务的优先级。</param>
  297. /// <returns>新增 Web 请求任务的序列编号。</returns>
  298. public int AddWebRequest(string webRequestUri, string tag, int priority)
  299. {
  300. return AddWebRequest(webRequestUri, null, null, tag, priority, null);
  301. }
  302. /// <summary>
  303. /// 增加 Web 请求任务。
  304. /// </summary>
  305. /// <param name="webRequestUri">Web 请求地址。</param>
  306. /// <param name="tag">Web 请求任务的标签。</param>
  307. /// <param name="userData">用户自定义数据。</param>
  308. /// <returns>新增 Web 请求任务的序列编号。</returns>
  309. public int AddWebRequest(string webRequestUri, string tag, object userData)
  310. {
  311. return AddWebRequest(webRequestUri, null, null, tag, DefaultPriority, userData);
  312. }
  313. /// <summary>
  314. /// 增加 Web 请求任务。
  315. /// </summary>
  316. /// <param name="webRequestUri">Web 请求地址。</param>
  317. /// <param name="priority">Web 请求任务的优先级。</param>
  318. /// <param name="userData">用户自定义数据。</param>
  319. /// <returns>新增 Web 请求任务的序列编号。</returns>
  320. public int AddWebRequest(string webRequestUri, int priority, object userData)
  321. {
  322. return AddWebRequest(webRequestUri, null, null, null, priority, userData);
  323. }
  324. /// <summary>
  325. /// 增加 Web 请求任务。
  326. /// </summary>
  327. /// <param name="webRequestUri">Web 请求地址。</param>
  328. /// <param name="postData">要发送的数据流。</param>
  329. /// <param name="tag">Web 请求任务的标签。</param>
  330. /// <param name="priority">Web 请求任务的优先级。</param>
  331. /// <returns>新增 Web 请求任务的序列编号。</returns>
  332. public int AddWebRequest(string webRequestUri, byte[] postData, string tag, int priority)
  333. {
  334. return AddWebRequest(webRequestUri, postData, null, tag, priority, null);
  335. }
  336. /// <summary>
  337. /// 增加 Web 请求任务。
  338. /// </summary>
  339. /// <param name="webRequestUri">Web 请求地址。</param>
  340. /// <param name="wwwForm">WWW 表单。</param>
  341. /// <param name="tag">Web 请求任务的标签。</param>
  342. /// <param name="priority">Web 请求任务的优先级。</param>
  343. /// <returns>新增 Web 请求任务的序列编号。</returns>
  344. public int AddWebRequest(string webRequestUri, WWWForm wwwForm, string tag, int priority)
  345. {
  346. return AddWebRequest(webRequestUri, null, wwwForm, tag, priority, null);
  347. }
  348. /// <summary>
  349. /// 增加 Web 请求任务。
  350. /// </summary>
  351. /// <param name="webRequestUri">Web 请求地址。</param>
  352. /// <param name="postData">要发送的数据流。</param>
  353. /// <param name="tag">Web 请求任务的标签。</param>
  354. /// <param name="userData">用户自定义数据。</param>
  355. /// <returns>新增 Web 请求任务的序列编号。</returns>
  356. public int AddWebRequest(string webRequestUri, byte[] postData, string tag, object userData)
  357. {
  358. return AddWebRequest(webRequestUri, postData, null, tag, DefaultPriority, userData);
  359. }
  360. /// <summary>
  361. /// 增加 Web 请求任务。
  362. /// </summary>
  363. /// <param name="webRequestUri">Web 请求地址。</param>
  364. /// <param name="wwwForm">WWW 表单。</param>
  365. /// <param name="tag">Web 请求任务的标签。</param>
  366. /// <param name="userData">用户自定义数据。</param>
  367. /// <returns>新增 Web 请求任务的序列编号。</returns>
  368. public int AddWebRequest(string webRequestUri, WWWForm wwwForm, string tag, object userData)
  369. {
  370. return AddWebRequest(webRequestUri, null, wwwForm, tag, DefaultPriority, userData);
  371. }
  372. /// <summary>
  373. /// 增加 Web 请求任务。
  374. /// </summary>
  375. /// <param name="webRequestUri">Web 请求地址。</param>
  376. /// <param name="postData">要发送的数据流。</param>
  377. /// <param name="priority">Web 请求任务的优先级。</param>
  378. /// <param name="userData">用户自定义数据。</param>
  379. /// <returns>新增 Web 请求任务的序列编号。</returns>
  380. public int AddWebRequest(string webRequestUri, byte[] postData, int priority, object userData)
  381. {
  382. return AddWebRequest(webRequestUri, postData, null, null, priority, userData);
  383. }
  384. /// <summary>
  385. /// 增加 Web 请求任务。
  386. /// </summary>
  387. /// <param name="webRequestUri">Web 请求地址。</param>
  388. /// <param name="wwwForm">WWW 表单。</param>
  389. /// <param name="priority">Web 请求任务的优先级。</param>
  390. /// <param name="userData">用户自定义数据。</param>
  391. /// <returns>新增 Web 请求任务的序列编号。</returns>
  392. public int AddWebRequest(string webRequestUri, WWWForm wwwForm, int priority, object userData)
  393. {
  394. return AddWebRequest(webRequestUri, null, wwwForm, null, priority, userData);
  395. }
  396. /// <summary>
  397. /// 增加 Web 请求任务。
  398. /// </summary>
  399. /// <param name="webRequestUri">Web 请求地址。</param>
  400. /// <param name="tag">Web 请求任务的标签。</param>
  401. /// <param name="priority">Web 请求任务的优先级。</param>
  402. /// <param name="userData">用户自定义数据。</param>
  403. /// <returns>新增 Web 请求任务的序列编号。</returns>
  404. public int AddWebRequest(string webRequestUri, string tag, int priority, object userData)
  405. {
  406. return AddWebRequest(webRequestUri, null, null, tag, priority, userData);
  407. }
  408. /// <summary>
  409. /// 增加 Web 请求任务。
  410. /// </summary>
  411. /// <param name="webRequestUri">Web 请求地址。</param>
  412. /// <param name="postData">要发送的数据流。</param>
  413. /// <param name="tag">Web 请求任务的标签。</param>
  414. /// <param name="priority">Web 请求任务的优先级。</param>
  415. /// <param name="userData">用户自定义数据。</param>
  416. /// <returns>新增 Web 请求任务的序列编号。</returns>
  417. public int AddWebRequest(string webRequestUri, byte[] postData, string tag, int priority, object userData)
  418. {
  419. return AddWebRequest(webRequestUri, postData, null, tag, priority, userData);
  420. }
  421. /// <summary>
  422. /// 增加 Web 请求任务。
  423. /// </summary>
  424. /// <param name="webRequestUri">Web 请求地址。</param>
  425. /// <param name="wwwForm">WWW 表单。</param>
  426. /// <param name="tag">Web 请求任务的标签。</param>
  427. /// <param name="priority">Web 请求任务的优先级。</param>
  428. /// <param name="userData">用户自定义数据。</param>
  429. /// <returns>新增 Web 请求任务的序列编号。</returns>
  430. public int AddWebRequest(string webRequestUri, WWWForm wwwForm, string tag, int priority, object userData)
  431. {
  432. return AddWebRequest(webRequestUri, null, wwwForm, tag, priority, userData);
  433. }
  434. /// <summary>
  435. /// 根据 Web 请求任务的序列编号移除 Web 请求任务。
  436. /// </summary>
  437. /// <param name="serialId">要移除 Web 请求任务的序列编号。</param>
  438. /// <returns>是否移除 Web 请求任务成功。</returns>
  439. public bool RemoveWebRequest(int serialId)
  440. {
  441. return m_WebRequestManager.RemoveWebRequest(serialId);
  442. }
  443. /// <summary>
  444. /// 根据 Web 请求任务的标签移除 Web 请求任务。
  445. /// </summary>
  446. /// <param name="tag">要移除 Web 请求任务的标签。</param>
  447. /// <returns>移除 Web 请求任务的数量。</returns>
  448. public int RemoveWebRequests(string tag)
  449. {
  450. return m_WebRequestManager.RemoveWebRequests(tag);
  451. }
  452. /// <summary>
  453. /// 移除所有 Web 请求任务。
  454. /// </summary>
  455. /// <returns>移除 Web 请求任务的数量。</returns>
  456. public int RemoveAllWebRequests()
  457. {
  458. return m_WebRequestManager.RemoveAllWebRequests();
  459. }
  460. /// <summary>
  461. /// 增加 Web 请求代理辅助器。
  462. /// </summary>
  463. /// <param name="index">Web 请求代理辅助器索引。</param>
  464. private void AddWebRequestAgentHelper(int index)
  465. {
  466. WebRequestAgentHelperBase webRequestAgentHelper = Helper.CreateHelper(m_WebRequestAgentHelperTypeName, m_CustomWebRequestAgentHelper, index);
  467. if (webRequestAgentHelper == null)
  468. {
  469. Log.Error("Can not create web request agent helper.");
  470. return;
  471. }
  472. webRequestAgentHelper.name = Utility.Text.Format("Web Request Agent Helper - {0}", index.ToString());
  473. Transform transform = webRequestAgentHelper.transform;
  474. transform.SetParent(m_InstanceRoot);
  475. transform.localScale = Vector3.one;
  476. m_WebRequestManager.AddWebRequestAgentHelper(webRequestAgentHelper);
  477. }
  478. /// <summary>
  479. /// 增加 Web 请求任务。
  480. /// </summary>
  481. /// <param name="webRequestUri">Web 请求地址。</param>
  482. /// <param name="postData">要发送的数据流。</param>
  483. /// <param name="wwwForm">WWW 表单。</param>
  484. /// <param name="tag">Web 请求任务的标签。</param>
  485. /// <param name="priority">Web 请求任务的优先级。</param>
  486. /// <param name="userData">用户自定义数据。</param>
  487. /// <returns>新增 Web 请求任务的序列编号。</returns>
  488. private int AddWebRequest(string webRequestUri, byte[] postData, WWWForm wwwForm, string tag, int priority, object userData)
  489. {
  490. return m_WebRequestManager.AddWebRequest(webRequestUri, postData, tag, priority, WWWFormInfo.Create(wwwForm, userData));
  491. }
  492. private void OnWebRequestStart(object sender, GameFramework.WebRequest.WebRequestStartEventArgs e)
  493. {
  494. m_EventComponent.Fire(this, WebRequestStartEventArgs.Create(e));
  495. }
  496. private void OnWebRequestSuccess(object sender, GameFramework.WebRequest.WebRequestSuccessEventArgs e)
  497. {
  498. m_EventComponent.Fire(this, WebRequestSuccessEventArgs.Create(e));
  499. }
  500. private void OnWebRequestFailure(object sender, GameFramework.WebRequest.WebRequestFailureEventArgs e)
  501. {
  502. Log.Warning("Web request failure, web request serial id '{0}', web request uri '{1}', error message '{2}'.", e.SerialId.ToString(), e.WebRequestUri, e.ErrorMessage);
  503. m_EventComponent.Fire(this, WebRequestFailureEventArgs.Create(e));
  504. }
  505. }
  506. }