{"id":29162,"date":"2024-11-25T13:36:00","date_gmt":"2024-11-25T05:36:00","guid":{"rendered":"https:\/\/fwq.ai\/blog\/29162\/"},"modified":"2024-11-25T13:36:00","modified_gmt":"2024-11-25T05:36:00","slug":"%e5%88%a9%e7%94%a8c%e5%bc%80%e5%8f%91%e5%be%ae%e4%bf%a1%e5%85%ac%e4%bc%97%e5%8f%b7%e4%b9%8b%e6%8e%a5%e6%94%b6%e4%ba%8b%e4%bb%b6%e6%8e%a8%e9%80%81%e4%b8%8e%e6%b6%88%e6%81%af%e6%8e%92%e9%87%8d%e7%9a%84","status":"publish","type":"post","link":"https:\/\/fwq.ai\/blog\/29162\/","title":{"rendered":"\u5229\u7528C#\u5f00\u53d1\u5fae\u4fe1\u516c\u4f17\u53f7\u4e4b\u63a5\u6536\u4e8b\u4ef6\u63a8\u9001\u4e0e\u6d88\u606f\u6392\u91cd\u7684\u65b9\u6cd5\u4ecb\u7ecd"},"content":{"rendered":"<p>\u8fd9\u7bc7\u6587\u7ae0\u4e3b\u8981\u4ecb\u7ecd\u5229\u7528\u5f00\u53d1\u5fae\u4fe1\u516c\u4f17\u53f7\u4e4b\u63a5\u6536\u4e8b\u4ef6\u63a8\u9001\u4e0e\u6d88\u606f\u6392\u91cd\u7684\u65b9\u6cd5\u4ecb\u7ecd,\u8be6\u7ec6\u5206\u6790\u4e86\u4e8b\u4ef6\u63a8\u9001\u4e0e\u6d88\u606f\u6392\u91cd\u7684\u4f7f\u7528\u6280\u5de7,\u5bf9\u5fae\u4fe1\u5f00\u53d1\u6709\u4e00\u5b9a\u53c2\u8003\u501f\u9274\u4ef7\u503c,\u9700\u8981\u7684\u670b\u53cb\u53ef\u4ee5\u53c2\u8003\u4e0b<\/p>\n<p>\u672c\u6587\u5b9e\u4f8b\u8bb2\u8ff0\u4e86C#\u5fae\u4fe1\u516c\u4f17\u53f7\u5f00\u53d1\u4e4b\u63a5\u6536\u4e8b\u4ef6\u63a8\u9001\u4e0e\u6d88\u606f\u6392\u91cd\u7684\u65b9\u6cd5\u3002\u5206\u4eab\u7ed9\u5927\u5bb6\u4f9b\u5927\u5bb6\u53c2\u8003\u3002\u5177\u4f53\u5206\u6790\u5982\u4e0b\uff1a<\/p>\n<p>\u5fae\u4fe1\u670d\u52a1\u5668\u57285\u79d2\u5185\u6536\u4e0d\u5230\u54cd\u5e94\u4f1a\u65ad\u6389\u8fde\u63a5\uff0c\u5e76\u4e14\u91cd\u65b0\u53d1\u8d77\u8bf7\u6c42\uff0c\u603b\u5171\u91cd\u8bd5\u4e09\u6b21\u3002\u8fd9\u6837\u7684\u8bdd\uff0c\u95ee\u9898\u5c31\u6765\u4e86\u3002\u6709\u8fd9\u6837\u4e00\u4e2a\u573a\u666f\uff1a\u5f53\u7528\u6237\u5173\u6ce8\u5fae\u4fe1\u8d26\u53f7\u65f6\uff0c\u83b7\u53d6\u5f53\u524d\u7528\u6237\u4fe1\u606f\uff0c\u7136\u540e\u5c06\u4fe1\u606f\u5199\u5230\u6570\u636e\u5e93\u4e2d\u3002\u7c7b\u4f3c\u4e8epc\u7aef\u7f51\u7ad9\u7684\u6ce8\u518c\u3002\u53ef\u80fd\u7531\u4e8e\u8fd9\u4e2a\u5173\u6ce8\u4e8b\u4ef6\u4e2d\uff0c\u6211\u4eec\u9700\u8981\u5904\u7406\u7684\u4e1a\u52a1\u903b\u8f91\u6bd4\u8f83\u590d\u6742\u3002\u5982\u9001\u79ef\u5206\u554a\uff0c\u5199\u7528\u6237\u65e5\u5fd7\u554a\uff0c\u5206\u914d\u7528\u6237\u7ec4\u554a\u3002\u7b49\u7b49\u2026\u2026\u4e00\u7cfb\u5217\u7684\u903b\u8f91\u9700\u8981\u6267\u884c\uff0c\u6216\u8005\u7f51\u7edc\u73af\u5883\u6bd4\u8f83\u590d\u6742\uff0c\u65e0\u6cd5\u4fdd\u8bc15\u79d2\u5185\u54cd\u5e94\u5f53\u524d\u7528\u6237\u7684\u64cd\u4f5c\uff0c\u90a3\u5982\u679c\u5f53\u64cd\u4f5c\u5c1a\u672a\u5b8c\u6210\uff0c\u5fae\u4fe1\u670d\u52a1\u5668\u53c8\u7ed9\u6211\u4eec\u7684\u670d\u52a1\u5668\u63a8\u9001\u4e86\u4e00\u6761\u76f8\u540c\u7684\u5173\u6ce8\u4e8b\u4ef6\uff0c\u6211\u4eec\u5c06\u518d\u6b21\u6267\u884c\u6211\u4eec\u7684\u90a3\u4e9b\u903b\u8f91\uff0c\u8fd9\u6837\u5c31\u6709\u53ef\u80fd\u5bfc\u81f4\u6570\u636e\u5e93\u4e2d\u51fa\u73b0\u91cd\u590d\u7684\u6570\u636e\uff08\u6709\u7684\u7ae5\u978b\u5c31\u4f1a\u8bf4\u4e86\uff0c\u6211\u5728\u63d2\u5165\u6570\u636e\u4e4b\u524d\u5148\u5224\u65ad\u5f53\u524d\u662f\u5426\u5df2\u7ecf\u5b58\u5728\u4e86\uff0c\u5982\u679c\u5b58\u5728\u4e86\u5c31\u4e0d\u6267\u884c\u63d2\u5165\u7684\u64cd\u4f5c\u3002\u6211\u60f3\u8bf4\u7684\u662f\uff0c\u6211\u5f53\u521d\u4e5f\u662f\u8fd9\u6837\u60f3\u7684\uff0c\u4f46\u771f\u5b9e\u7684\u8fd0\u884c\u73af\u5883\u548c\u6211\u4eec\u7684\u8c03\u8bd5\u73af\u5883\u8fd8\u662f\u6709\u5dee\u8ddd\u7684\uff0c\u76f4\u5230\u53d1\u73b0\u6570\u636e\u5e93\u4e2d\u6709\u4e0d\u5c11\u91cd\u590d\u7684\u7528\u6237\u4fe1\u606f\u65f6\uff0c\u6211\u624d\u53d1\u73b0\u6d88\u606f\u53bb\u91cd\u7684\u91cd\u8981\u6027\u3002\uff09\u3002<\/p>\n<p>&nbsp;<br \/>\u6d88\u606f\u7684\u53bb\u91cd\u666e\u901a\u6d88\u606f\u548c\u4e8b\u4ef6\u6d88\u606f\u662f\u6709\u533a\u522b\u7684\u3002\u666e\u901a\u6d88\u606f\u4f7f\u7528msgid,\u800c\u4e8b\u4ef6\u6d88\u606f\u4f7f\u7528FromUserName + CreateTime\u3002\u6211\u7684\u601d\u8def\u662f\uff1a<br \/>&nbsp;<br \/>\u65b0\u5efa\u7c7bBaseMsg\uff0c\u6709\u4e09\u4e2a\u5c5e\u6027\u5206\u522b\u662fFromUser\uff0cMsgFlag\uff0cCreateTime\u3002\u4ee3\u7801\u5982\u4e0b\uff1a<\/p>\n<p>\u4ee3\u7801\u5982\u4e0b:<\/p>\n<pre>public&nbsp;class&nbsp;BaseMsg\r\n{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;\u53d1\u9001\u8005\u6807\u8bc6\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;\/summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;FromUser&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;\u6d88\u606f\u8868\u793a\u3002\u666e\u901a\u6d88\u606f\u65f6\uff0c\u4e3amsgid\uff0c\u4e8b\u4ef6\u6d88\u606f\u65f6\uff0c\u4e3a\u4e8b\u4ef6\u7684\u521b\u5efa\u65f6\u95f4\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;\/summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;MsgFlag&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;\u6dfb\u52a0\u5230\u961f\u5217\u7684\u65f6\u95f4\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;\/summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;DateTime&nbsp;CreateTime&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}\r\n}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>&nbsp;<br \/>\u521b\u5efa\u4e2a\u9759\u6001\u5217\u8868_queue\uff0c\u7528\u6765\u5b58\u50a8\u6d88\u606f\u5217\u8868\uff0c\u5217\u8868\u7684\u7c7b\u578b\u662fList . <br \/>\u5728\u5904\u7406\u5fae\u4fe1\u6d88\u606f\u4f53\u524d\uff0c\u9996\u5148\u5224\u65ad\u5217\u8868\u662f\u5426\u5b9e\u4f8b\u5316\uff0c\u5982\u679c\u6ca1\u6709\u5b9e\u4f8b\u5316\u5219\u5b9e\u4f8b\u5316\uff0c\u5426\u5219\u5224\u65ad\u5217\u8868\u7684\u957f\u5ea6\u662f\u5426\u5927\u4e8e\u6216\u7b49\u4e8e50\uff08\u8fd9\u4e2a\u53ef\u4ee5\u81ea\u5b9a\u4e49\uff0c\u7528\u5904\u5c31\u662f\u5fae\u4fe1\u5e76\u53d1\u7684\u6d88\u606f\u91cf\uff09\uff0c\u5982\u679c\u5927\u4e8e\u6216\u7b49\u4e8e50\uff0c\u5219\u4fdd\u755920\u79d2\u5185\u672a\u54cd\u5e94\u7684\u6d88\u606f\uff085\u79d2\u91cd\u8bd5\u4e00\u6b21\uff0c\u603b\u5171\u91cd\u8bd53\u6b21\uff0c\u5c31\u662f15\u79d2\uff0c\u4fdd\u9669\u8d77\u89c1\u8fd9\u91cc\u519920\u79d2\uff09\u3002 <br \/>\u83b7\u53d6\u5f53\u524d\u6d88\u606f\u4f53\u7684\u6d88\u606f\u7c7b\u578b\uff0c\u5e76\u6839\u636e_queue\u5224\u65ad\u5f53\u524d\u6d88\u606f\u662f\u5426\u5df2\u7ecf\u8bf7\u6c42\u4e86\u3002\u5982\u679c\u662f\u4e8b\u4ef6\u5219\u4fdd\u5b58FromUser\u548c\u521b\u5efa\u65f6\u95f4\u3002\u5982\u679c\u662f\u666e\u901a\u6d88\u606f\u5219\u4fdd\u5b58MsgFlag\u3002\u4e0b\u9762\u662f\u4ee3\u7801\uff1a  <\/p>\n<p>\u4ee3\u7801\u5982\u4e0b:<\/p>\n<pre>if&nbsp;(_queue&nbsp;==&nbsp;null)\r\n{\r\n&nbsp;_queue&nbsp;=&nbsp;new&nbsp;List&lt;basemsg&gt;();\r\n}\r\nelse&nbsp;if(_queue.Count&amp;gt;=50)\r\n{\r\n&nbsp;_queue&nbsp;=&nbsp;_queue.Where(q&nbsp;=&amp;gt;&nbsp;{&nbsp;return&nbsp;q.CreateTime.AddSeconds(20)&nbsp;&amp;gt;&nbsp;DateTime.Now;&nbsp;}).ToList();\/\/\u4fdd\u755920\u79d2\u5185\u672a\u54cd\u5e94\u7684\u6d88\u606f\r\n}\r\nXElement&nbsp;xdoc&nbsp;=&nbsp;XElement.Parse(xml);\r\nvar&nbsp;msgtype&nbsp;=&nbsp;xdoc.Element(\"MsgType\").Value.ToUpper();\r\nvar&nbsp;FromUserName&nbsp;=&nbsp;xdoc.Element(\"FromUserName\").Value;\r\nvar&nbsp;MsgId&nbsp;=&nbsp;xdoc.Element(\"MsgId\").Value;\r\nvar&nbsp;CreateTime&nbsp;=&nbsp;xdoc.Element(\"CreateTime\").Value;\r\nMsgType&nbsp;type&nbsp;=&nbsp;(MsgType)Enum.Parse(typeof(MsgType),&nbsp;msgtype);\r\nif&nbsp;(type!=MsgType.EVENT)\r\n{\r\n&nbsp;if&nbsp;(_queue.FirstOrDefault(m&nbsp;=&amp;gt;&nbsp;{&nbsp;return&nbsp;m.MsgFlag&nbsp;==&nbsp;MsgId;&nbsp;})&nbsp;==&nbsp;null)\r\n&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_queue.Add(new&nbsp;BaseMsg\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;CreateTime&nbsp;=&nbsp;DateTime.Now,\r\n&nbsp;&nbsp;FromUser&nbsp;=&nbsp;FromUserName,\r\n&nbsp;&nbsp;MsgFlag&nbsp;=&nbsp;MsgId\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});\r\n&nbsp;}\r\n&nbsp;else\r\n&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;null;\r\n&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n}\r\nelse\r\n{\r\n&nbsp;if&nbsp;(_queue.FirstOrDefault(m&nbsp;=&amp;gt;&nbsp;{&nbsp;return&nbsp;m.MsgFlag&nbsp;==&nbsp;CreateTime;&nbsp;})&nbsp;==&nbsp;null)\r\n&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_queue.Add(new&nbsp;BaseMsg\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;CreateTime&nbsp;=&nbsp;DateTime.Now,\r\n&nbsp;&nbsp;FromUser&nbsp;=&nbsp;FromUserName,\r\n&nbsp;&nbsp;MsgFlag&nbsp;=&nbsp;CreateTime\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});\r\n&nbsp;}\r\n&nbsp;else\r\n&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;null;\r\n&nbsp;}\r\n}&lt;\/basemsg&gt;<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>&nbsp;<br \/>\u5f53\u6d88\u606f\u5df2\u7ecf\u5b58\u5728\u961f\u5217\u4e2d\u65f6\uff0c\u5219\u4e0d\u8f6c\u6362\u5f53\u524d\u7684\u6d88\u606f\u4e3a\u5b9e\u4f53\u4e86\uff0c\u76f4\u63a5\u8fd4\u56denull\uff0c\u8c03\u7528\u7684\u65f6\u5019\uff0c\u5f53\u8fd4\u56denull\u65f6\u5c31\u4e0d\u505a\u4efb\u4f55\u5904\u7406\u3002<br \/>&nbsp;<br \/>\u4e0b\u9762\u5f00\u59cb\u8bb2\u89e3\u4e8b\u4ef6\u6d88\u606f\u3002\u63a5\u4e0a\u7bc7\u8bb2\u3002\u6240\u6709\u7684\u6d88\u606f\u90fd\u7ee7\u627fBaseMessage\uff0c\u800c\u6240\u6709\u7684\u4e8b\u4ef6\u7c7b\u578b\u90fd\u5305\u542b\u4e00\u4e2aEvent\u7684\u5c5e\u6027\u3002\u8fd9\u91cc\u4e3a\u4e86\u65b9\u4fbf\u8c03\u7528\uff0c\u5c06\u6d88\u606f <\/p>\n<p>\u4ee3\u7801\u5982\u4e0b:<\/p>\n<pre>\/\/\/&nbsp;&lt;summary&gt;\r\n\/\/\/&nbsp;\u4e8b\u4ef6\u7c7b\u578b\u679a\u4e3e\r\n\/\/\/&nbsp;&lt;\/summary&gt;\r\npublic&nbsp;enum&nbsp;Event\r\n{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;\u975e\u4e8b\u4ef6\u7c7b\u578b\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;\/summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NOEVENT,\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;\u8ba2\u9605\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;\/summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SUBSCRIBE,\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;\u53d6\u6d88\u8ba2\u9605\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;\/summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UNSUBSCRIBE,\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;\u626b\u63cf\u5e26\u53c2\u6570\u7684\u4e8c\u7ef4\u7801\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;\/summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SCAN,\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;\u5730\u7406\u4f4d\u7f6e\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;\/summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LOCATION,\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;\u5355\u51fb\u6309\u94ae\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;\/summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLICK,\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;\u94fe\u63a5\u6309\u94ae\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;\/summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VIEW,\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;\u626b\u7801\u63a8\u4e8b\u4ef6\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;\/summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SCANCODE_PUSH,\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;\u626b\u7801\u63a8\u4e8b\u4ef6\u4e14\u5f39\u51fa\u201c\u6d88\u606f\u63a5\u6536\u4e2d\u201d\u63d0\u793a\u6846\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;\/summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SCANCODE_WAITMSG,\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;\u5f39\u51fa\u7cfb\u7edf\u62cd\u7167\u53d1\u56fe\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;\/summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PIC_SYSPHOTO,\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;\u5f39\u51fa\u62cd\u7167\u6216\u8005\u76f8\u518c\u53d1\u56fe\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;\/summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PIC_PHOTO_OR_ALBUM,\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;\u5f39\u51fa\u5fae\u4fe1\u76f8\u518c\u53d1\u56fe\u5668\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;\/summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PIC_WEIXIN,\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;\u5f39\u51fa\u5730\u7406\u4f4d\u7f6e\u9009\u62e9\u5668\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;\/summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LOCATION_SELECT,\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;\u6a21\u677f\u6d88\u606f\u63a8\u9001\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;\/summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TEMPLATESENDJOBFINISH\r\n}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>&nbsp;<br \/>\u5b9a\u4e49\u597d\u679a\u4e3e\u540e\uff0c\u5c31\u662f\u5b9a\u4e49\u6d88\u606f\u5b9e\u4f53\u4e86\u3002<br \/>&nbsp;<br \/>\u5173\u6ce8\/\u53d6\u6d88\u5173\u6ce8\u4e8b\u4ef6<br \/>xml\u6570\u636e\u5305\u5982\u4e0b\uff1a<\/p>\n<p>\u4ee3\u7801\u5982\u4e0b:<\/p>\n<pre>&lt;xml&gt;&lt;tousername&gt;&lt;\/tousername&gt;&lt;fromusername&gt;&lt;\/fromusername&gt;&lt;createtime&gt;123456789&lt;\/createtime&gt;&lt;msgtype&gt;&lt;\/msgtype&gt;&lt;event&gt;&lt;\/event&gt;&lt;\/xml&gt;<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>&nbsp;<br \/>\u5bf9\u5e94\u7684\u5b9e\u4f53\uff1a<\/p>\n<p>\u4ee3\u7801\u5982\u4e0b:<\/p>\n<pre>\/\/\/&nbsp;&lt;summary&gt;\r\n\/\/\/&nbsp;\u8ba2\u9605\/\u53d6\u6d88\u8ba2\u9605\u4e8b\u4ef6\r\n\/\/\/&nbsp;&lt;\/summary&gt;\r\npublic&nbsp;class&nbsp;SubEventMessage&nbsp;:&nbsp;EventMessage\r\n{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;string&nbsp;_eventkey;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;\u4e8b\u4ef6KEY\u503c\uff0cqrscene_\u4e3a\u524d\u7f00\uff0c\u540e\u9762\u4e3a\u4e8c\u7ef4\u7801\u7684\u53c2\u6570\u503c\uff08\u5df2\u53bb\u6389\u524d\u7f00\uff0c\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\uff09\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;\/summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;EventKey\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get&nbsp;{&nbsp;return&nbsp;_eventkey;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;{&nbsp;_eventkey&nbsp;=&nbsp;value.Replace(\"qrscene_\",&nbsp;\"\");&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;\u4e8c\u7ef4\u7801\u7684ticket\uff0c\u53ef\u7528\u6765\u6362\u53d6\u4e8c\u7ef4\u7801\u56fe\u7247\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;\/summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;Ticket&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}\r\n}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>&nbsp;<br \/>\u8fd9\u91cc\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u5f53\u7528\u6237\u626b\u63cf\u5e26\u53c2\u6570\u7684\u4e8c\u7ef4\u7801\u65f6\uff0c\u5982\u679c\u7528\u6237\u6ca1\u6709\u5173\u6ce8\u5f53\u524d\u516c\u4f17\u53f7\uff0c\u7528\u6237\u5173\u6ce8\u65f6\uff0c\u4f1a\u5728\u6d88\u606f\u4f53\u4e2d\u5e26\u4e0aqrscene_\u53c2\u6570\uff0c\u548cTicket\uff0c\u6240\u4ee5\u8fd9\u91cc\u5b9a\u4e49\u4e86\u4e24\u4e2a\u5c5e\u6027\uff1aEventKey\uff0cTicket\u3002\u5f53\u7ed9EventKey\u8d4b\u503c\u65f6\uff0c\u66ff\u6362\u6389qrscene_\uff0c\u56e0\u4e3a\u6211\u4eec\u771f\u6b63\u9700\u8981\u7684\u5c31\u662f\u540e\u9762\u7684\u53c2\u6570\u3002<br \/>&nbsp;<br \/>\u626b\u63cf\u5e26\u53c2\u6570\u4e8c\u7ef4\u7801\u4e8b\u4ef6<br \/>\u7528\u6237\u626b\u63cf\u5e26\u573a\u666f\u503c\u4e8c\u7ef4\u7801\u65f6\uff0c\u53ef\u80fd\u63a8\u9001\u4e00\u4e0b\u4e24\u79cd\u4e8b\u4ef6\uff1a<br \/>&nbsp;<br \/>\u5982\u679c\u7528\u6237\u8fd8\u672a\u5173\u6ce8\u516c\u4f17\u53f7\uff0c\u5219\u7528\u6237\u53ef\u4ee5\u5173\u6ce8\u516c\u4f17\u53f7\uff0c\u5173\u6ce8\u540e\u5fae\u4fe1\u4f1a\u5c06\u5e26\u573a\u666f\u503c\u5173\u6ce8\u4e8b\u4ef6\u63a8\u9001\u7ed9\u5f00\u53d1\u8005\u3002<br \/>\u5982\u679c\u7528\u6237\u5df2\u7ecf\u5173\u6ce8\u516c\u4f17\u53f7\uff0c\u5219\u5fae\u4fe1\u4f1a\u5c06\u5e26\u573a\u666f\u503c\u626b\u63cf\u4e8b\u4ef6\u63a8\u9001\u7ed9\u5f00\u53d1\u8005\u3002\u3001<br \/>\u7b2c\u4e00\u79cd\u4e0a\u9762\u5df2\u7ecf\u8bb2\u4e86\uff0c\u8fd9\u91cc\u5c31\u53ea\u8bf4\u660e\u4e0b\u7b2c\u4e8c\u79cd\u3002<br \/>&nbsp;<br \/>\u7528\u6237\u5df2\u5173\u6ce8\u65f6\u7684\u4e8b\u4ef6\u63a8\u9001<br \/>&nbsp;<br \/>xml\u5305\u5982\u4e0b\uff1a<\/p>\n<p>&nbsp;\u4ee3\u7801\u5982\u4e0b:<\/p>\n<pre>&lt;xml&gt;&lt;tousername&gt;&lt;\/tousername&gt;&lt;fromusername&gt;&lt;\/fromusername&gt;&lt;createtime&gt;123456789&lt;\/createtime&gt;&lt;msgtype&gt;&lt;\/msgtype&gt;&lt;event&gt;&lt;\/event&gt;&lt;eventkey&gt;&lt;\/eventkey&gt;&lt;ticket&gt;&lt;\/ticket&gt;&lt;\/xml&gt;<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>&nbsp;<br \/>\u5bf9\u5e94\u7684\u5b9e\u4f53\u5982\u4e0b\uff1a<\/p>\n<p>\u4ee3\u7801\u5982\u4e0b:<\/p>\n<pre>\/\/\/&nbsp;&lt;summary&gt;\r\n\/\/\/&nbsp;\u626b\u63cf\u5e26\u53c2\u6570\u7684\u4e8c\u7ef4\u7801\u5b9e\u4f53\r\n\/\/\/&nbsp;&lt;\/summary&gt;\r\npublic&nbsp;class&nbsp;ScanEventMessage&nbsp;:&nbsp;EventMessage\r\n{\r\n&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;\u4e8b\u4ef6KEY\u503c\uff0c\u662f\u4e00\u4e2a32\u4f4d\u65e0\u7b26\u53f7\u6574\u6570\uff0c\u5373\u521b\u5efa\u4e8c\u7ef4\u7801\u65f6\u7684\u4e8c\u7ef4\u7801scene_id\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;\/summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;EventKey&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;\u4e8c\u7ef4\u7801\u7684ticket\uff0c\u53ef\u7528\u6765\u6362\u53d6\u4e8c\u7ef4\u7801\u56fe\u7247\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;\/summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;Ticket&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}\r\n}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>&nbsp;<br \/>\u4e0a\u62a5\u5730\u7406\u4f4d\u7f6e\u4e8b\u4ef6<br \/>\u5f53\u516c\u4f17\u53f7\u5f00\u542f\u4e0a\u62a5\u5730\u7406\u4f4d\u7f6e\u529f\u80fd\u540e\uff0c\u6bcf\u6b21\u8fdb\u5165\u516c\u4f17\u53f7\u4f1a\u8bdd\u65f6\uff0c\u7528\u6237\u540c\u610f\u4e0a\u62a5\u5730\u7406\u4f4d\u7f6e\u540e\uff0c\u90fd\u4f1a\u5728\u8fdb\u5165\u65f6\u4e0a\u62a5\u5730\u7406\u4f4d\u7f6e\uff0c\u6216\u5728\u8fdb\u5165\u56de\u8bdd\u540e\u6bcf5\u79d2\u4e0a\u62a5\u4e00\u6b21\u5730\u7406\u4f4d\u7f6e\uff0c\u516c\u4f17\u53f7\u53ef\u4ee5\u518d\u516c\u4f17\u5e73\u53f0\u7684\u540e\u53f0\u4e2d\u4fee\u6539\u8bbe\u7f6e\u3002\u4e0a\u62a5\u5730\u7406\u4f4d\u7f6e\u65f6\uff0c\u5fae\u4fe1\u4f1a\u5c06\u4e0a\u62a5\u5730\u7406\u4f4d\u7f6e\u4e8b\u4ef6\u63a8\u9001\u5230\u5f00\u53d1\u8005\u586b\u5199\u7684url\u3002<br \/>&nbsp;<br \/>xml\u6570\u636e\u5305\u5982\u4e0b\uff1a<\/p>\n<p>\u4ee3\u7801\u5982\u4e0b:<\/p>\n<pre>&lt;xml&gt;&lt;tousername&gt;&lt;\/tousername&gt;&lt;fromusername&gt;&lt;\/fromusername&gt;&lt;createtime&gt;123456789&lt;\/createtime&gt;&lt;msgtype&gt;&lt;\/msgtype&gt;&lt;event&gt;&lt;\/event&gt;&lt;latitude&gt;23.137466&lt;\/latitude&gt;&lt;longitude&gt;113.352425&lt;\/longitude&gt;&lt;precision&gt;119.385040&lt;\/precision&gt;&lt;\/xml&gt;<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>&nbsp;<br \/>\u5bf9\u5e94\u7684\u5b9e\u4f53\u5982\u4e0b\uff1a<\/p>\n<p>\u4ee3\u7801\u5982\u4e0b:<\/p>\n<pre>\/\/\/&nbsp;&lt;summary&gt;\r\n\/\/\/&nbsp;\u4e0a\u62a5\u5730\u7406\u4f4d\u7f6e\u5b9e\u4f53\r\n\/\/\/&nbsp;&lt;\/summary&gt;\r\npublic&nbsp;class&nbsp;LocationEventMessage&nbsp;:&nbsp;EventMessage\r\n{\r\n&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;\u5730\u7406\u4f4d\u7f6e\u7eac\u5ea6\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;\/summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;Latitude&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;\u5730\u7406\u4f4d\u7f6e\u7ecf\u5ea6\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;\/summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;Longitude&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;\u5730\u7406\u4f4d\u7f6e\u7cbe\u5ea6\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;\/summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;Precision&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}\r\n}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>&nbsp;<br \/>\u81ea\u5b9a\u4e49\u83dc\u5355\u4e8b\u4ef6\u5e38\u7528\u7684\u4e8b\u4ef6\u6709\uff1aclick\uff0cview\uff0cscancode_puth\uff0cscancode_waitmsg\uff0clocation_select\u3002\u53e6\u5916\u8fd8\u6709\u4e09\u79cd\u53d1\u56fe\u7684\u4e8b\u4ef6\uff0c\u7531\u4e8e\u5e76\u4e0d\u5e38\u7528\uff0c\u7b14\u8005\u4e5f\u6ca1\u60f3\u5230\u4f7f\u7528\u573a\u666f\uff0c\u518d\u6b21\u5c31\u4e0d\u4e00\u4e00\u8bb2\u8ff0\u4e86\uff0c\u6709\u5174\u8da3\u7684\u53ef\u4ee5\u81ea\u5df1\u7814\u7a76\u4e0b\uff0c\u6216\u8005\u548c\u6211\u8fdb\u884c\u4ea4\u6d41\u3002<br \/>&nbsp;<br \/>click\u4e8b\u4ef6\u63a8\u9001\u7684xml\u6570\u636e\u5305\uff1a<\/p>\n<p>\u4ee3\u7801\u5982\u4e0b:<\/p>\n<pre>&lt;xml&gt;&lt;tousername&gt;&lt;\/tousername&gt;&lt;fromusername&gt;&lt;\/fromusername&gt;&lt;createtime&gt;123456789&lt;\/createtime&gt;&lt;msgtype&gt;&lt;\/msgtype&gt;&lt;event&gt;&lt;\/event&gt;&lt;eventkey&gt;&lt;\/eventkey&gt;&lt;\/xml&gt;<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>&nbsp;<br \/>view\u4e8b\u4ef6\u63a8\u9001\u7684xml\u6570\u636e\u5305\u548cclick\u7684\u683c\u5f0f\u662f\u4e00\u6837\u7684\uff0c\u6240\u4ee5\u5b9a\u4e49\u4e00\u4e2a\u7c7b\u5c31\u53ef\u4ee5\u4e86\uff0c\u5982\u4e0b\uff1a<\/p>\n<p>&nbsp;\u4ee3\u7801\u5982\u4e0b:<\/p>\n<pre>\/\/\/&nbsp;&lt;summary&gt;\r\n\/\/\/&nbsp;\u666e\u901a\u83dc\u5355\u4e8b\u4ef6\uff0c\u5305\u62ecclick\u548cview\r\n\/\/\/&nbsp;&lt;\/summary&gt;\r\npublic&nbsp;class&nbsp;NormalMenuEventMessage&nbsp;:&nbsp;EventMessage\r\n{\r\n&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;\u4e8b\u4ef6KEY\u503c\uff0c\u8bbe\u7f6e\u7684\u8df3\u8f6cURL\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;\/summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;EventKey&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}\r\n}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>&nbsp;<br \/>scancode\u4e8b\u4ef6\u7684xml\u6570\u636e\u5305\u5982\u4e0b\uff1a<\/p>\n<p>\u4ee3\u7801\u5982\u4e0b:<\/p>\n<pre>&lt;xml&gt;&lt;tousername&gt;&lt;\/tousername&gt;&lt;fromusername&gt;&lt;\/fromusername&gt;&lt;createtime&gt;1419265698&lt;\/createtime&gt;&lt;msgtype&gt;&lt;\/msgtype&gt;&lt;event&gt;&lt;\/event&gt;&lt;eventkey&gt;&lt;\/eventkey&gt;&lt;scancodeinfo&gt;&lt;scantype&gt;&lt;\/scantype&gt;&lt;scanresult&gt;&lt;\/scanresult&gt;&lt;\/scancodeinfo&gt;&lt;\/xml&gt;<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>\u5bf9\u5e94\u7684\u5b9e\u4f53\u5982\u4e0b\uff1a<\/p>\n<p>&nbsp;\u4ee3\u7801\u5982\u4e0b:<\/p>\n<pre>\/\/\/&nbsp;&lt;summary&gt;\r\n\/\/\/&nbsp;\u83dc\u5355\u626b\u63cf\u4e8b\u4ef6\r\n\/\/\/&nbsp;&lt;\/summary&gt;\r\npublic&nbsp;class&nbsp;ScanMenuEventMessage&nbsp;:&nbsp;EventMessage\r\n{\r\n&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;\u4e8b\u4ef6KEY\u503c\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;\/summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;EventKey&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;\u626b\u7801\u7c7b\u578b\u3002qrcode\u662f\u4e8c\u7ef4\u7801\uff0c\u5176\u4ed6\u7684\u662f\u6761\u7801\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;\/summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;ScanType&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;\u626b\u63cf\u7ed3\u679c\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;\/summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;ScanResult&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}\r\n}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>&nbsp;<br \/>\u81f3\u6b64\uff0c\u5f53\u524d\u5e38\u7528\u7684\u4e8b\u4ef6\u7c7b\u578b\u6d88\u606f\u90fd\u5df2\u5b9a\u4e49\u5b8c\u6bd5\uff0c\u7ed3\u5408\u4e0a\u4e00\u7bc7\u6240\u8bb2\u7684\uff0c\u5c06xml\u6570\u636e\u5305\u8f6c\u6362\u6210\u5bf9\u8c61\u7684\u5b8c\u6574\u4ee3\u7801\u5982\u4e0b\uff1a<\/p>\n<p>\u4ee3\u7801\u5982\u4e0b:<\/p>\n<pre>public&nbsp;class&nbsp;MessageFactory\r\n{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;List&lt;basemsg&gt;&nbsp;_queue;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;BaseMessage&nbsp;CreateMessage(string&nbsp;xml)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(_queue&nbsp;==&nbsp;null)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_queue&nbsp;=&nbsp;new&nbsp;List&lt;basemsg&gt;();\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(_queue.Count&amp;gt;=50)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_queue&nbsp;=&nbsp;_queue.Where(q&nbsp;=&amp;gt;&nbsp;{&nbsp;return&nbsp;q.CreateTime.AddSeconds(20)&nbsp;&amp;gt;&nbsp;DateTime.Now;&nbsp;}).ToList();\/\/\u4fdd\u755920\u79d2\u5185\u672a\u54cd\u5e94\u7684\u6d88\u606f\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XElement&nbsp;xdoc&nbsp;=&nbsp;XElement.Parse(xml);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;msgtype&nbsp;=&nbsp;xdoc.Element(\"MsgType\").Value.ToUpper();\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;FromUserName&nbsp;=&nbsp;xdoc.Element(\"FromUserName\").Value;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;MsgId&nbsp;=&nbsp;xdoc.Element(\"MsgId\").Value;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;CreateTime&nbsp;=&nbsp;xdoc.Element(\"CreateTime\").Value;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MsgType&nbsp;type&nbsp;=&nbsp;(MsgType)Enum.Parse(typeof(MsgType),&nbsp;msgtype);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(type!=MsgType.EVENT)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(_queue.FirstOrDefault(m&nbsp;=&amp;gt;&nbsp;{&nbsp;return&nbsp;m.MsgFlag&nbsp;==&nbsp;MsgId;&nbsp;})&nbsp;==&nbsp;null)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_queue.Add(new&nbsp;BaseMsg\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CreateTime&nbsp;=&nbsp;DateTime.Now,\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FromUser&nbsp;=&nbsp;FromUserName,\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MsgFlag&nbsp;=&nbsp;MsgId\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;null;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(_queue.FirstOrDefault(m&nbsp;=&amp;gt;&nbsp;{&nbsp;return&nbsp;m.MsgFlag&nbsp;==&nbsp;CreateTime;&nbsp;})&nbsp;==&nbsp;null)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_queue.Add(new&nbsp;BaseMsg\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CreateTime&nbsp;=&nbsp;DateTime.Now,\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FromUser&nbsp;=&nbsp;FromUserName,\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MsgFlag&nbsp;=&nbsp;CreateTime\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;null;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch&nbsp;(type)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;MsgType.TEXT:&nbsp;return&nbsp;Utils.ConvertObj&lt;textmessage&gt;(xml);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;MsgType.IMAGE:&nbsp;return&nbsp;Utils.ConvertObj@@##@@(xml);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;MsgType.VIDEO:&nbsp;return&nbsp;Utils.ConvertObj&lt;videomessage&gt;(xml);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;MsgType.VOICE:&nbsp;return&nbsp;Utils.ConvertObj&lt;voicemessage&gt;(xml);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;MsgType.LINK:\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Utils.ConvertObj&lt;linkmessage&gt;(xml);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;MsgType.LOCATION:\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Utils.ConvertObj&lt;locationmessage&gt;(xml);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;MsgType.EVENT:\/\/\u4e8b\u4ef6\u7c7b\u578b\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;eventtype&nbsp;=&nbsp;(Event)Enum.Parse(typeof(Event),&nbsp;xdoc.Element(\"Event\").Value.ToUpper());\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch&nbsp;(eventtype)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;Event.CLICK:\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Utils.ConvertObj&lt;normalmenueventmessage&gt;(xml);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;Event.VIEW:&nbsp;return&nbsp;Utils.ConvertObj&lt;normalmenueventmessage&gt;(xml);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;Event.LOCATION:&nbsp;return&nbsp;Utils.ConvertObj&lt;locationeventmessage&gt;(xml);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;Event.LOCATION_SELECT:&nbsp;return&nbsp;Utils.ConvertObj&lt;locationmenueventmessage&gt;(xml);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;Event.SCAN:&nbsp;return&nbsp;Utils.ConvertObj&lt;scaneventmessage&gt;(xml);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;Event.SUBSCRIBE:&nbsp;return&nbsp;Utils.ConvertObj&lt;subeventmessage&gt;(xml);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;Event.UNSUBSCRIBE:&nbsp;return&nbsp;Utils.ConvertObj&lt;subeventmessage&gt;(xml);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;Event.SCANCODE_WAITMSG:&nbsp;return&nbsp;Utils.ConvertObj&lt;scanmenueventmessage&gt;(xml);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Utils.ConvertObj&lt;eventmessage&gt;(xml);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;break;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Utils.ConvertObj&lt;basemessage&gt;(xml);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n}&lt;\/basemessage&gt;&lt;\/eventmessage&gt;&lt;\/scanmenueventmessage&gt;&lt;\/subeventmessage&gt;&lt;\/subeventmessage&gt;&lt;\/scaneventmessage&gt;&lt;\/locationmenueventmessage&gt;&lt;\/locationeventmessage&gt;&lt;\/normalmenueventmessage&gt;&lt;\/normalmenueventmessage&gt;&lt;\/locationmessage&gt;&lt;\/linkmessage&gt;&lt;\/voicemessage&gt;&lt;\/videomessage&gt;&lt;\/textmessage&gt;&lt;\/basemsg&gt;&lt;\/basemsg&gt;<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p><\/p>\n<p><img> <\/p>\n<p>\u4ee5\u4e0a\u5c31\u662f\u5229\u7528C#\u5f00\u53d1\u5fae\u4fe1\u516c\u4f17\u53f7\u4e4b\u63a5\u6536\u4e8b\u4ef6\u63a8\u9001\u4e0e\u6d88\u606f\u6392\u91cd\u7684\u65b9\u6cd5\u4ecb\u7ecd\u7684\u8be6\u7ec6\u5185\u5bb9\uff0c\u66f4\u591a\u8bf7\u5173\u6ce8\u7c73\u4e91\u5176\u5b83\u76f8\u5173\u6587\u7ae0\uff01<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u8fd9\u7bc7\u6587\u7ae0\u4e3b\u8981\u4ecb\u7ecd\u5229\u7528\u5f00\u53d1\u5fae\u4fe1\u516c\u4f17\u53f7\u4e4b\u63a5\u6536\u4e8b\u4ef6\u63a8\u9001\u4e0e\u6d88\u606f\u6392\u91cd\u7684\u65b9\u6cd5\u4ecb\u7ecd,\u8be6\u7ec6\u5206\u6790\u4e86\u4e8b\u4ef6\u63a8\u9001\u4e0e\u6d88\u606f\u6392\u91cd\u7684\u4f7f\u7528\u6280\u5de7,\u5bf9\u5fae\u4fe1\u5f00\u53d1\u6709\u4e00\u5b9a\u53c2\u8003\u501f\u9274\u4ef7\u503c,\u9700\u8981\u7684\u670b\u53cb\u53ef\u4ee5\u53c2\u8003\u4e0b \u672c\u6587\u5b9e\u4f8b\u8bb2\u8ff0\u4e86C#\u5fae\u4fe1\u516c\u4f17\u53f7\u5f00\u53d1\u4e4b\u63a5\u6536\u4e8b\u4ef6\u63a8\u9001\u4e0e\u6d88\u606f\u6392\u91cd\u7684\u65b9\u6cd5\u3002\u5206\u4eab\u7ed9\u5927\u5bb6\u4f9b\u5927\u5bb6\u53c2\u8003\u3002\u5177\u4f53\u5206\u6790\u5982\u4e0b\uff1a \u5fae\u4fe1\u670d\u52a1\u5668\u57285\u79d2\u5185\u6536\u4e0d\u5230\u54cd\u5e94\u4f1a\u65ad\u6389\u8fde\u63a5\uff0c\u5e76\u4e14\u91cd\u65b0\u53d1\u8d77\u8bf7\u6c42\uff0c\u603b\u5171\u91cd\u8bd5\u4e09\u6b21\u3002\u8fd9\u6837\u7684\u8bdd\uff0c\u95ee\u9898\u5c31\u6765\u4e86\u3002\u6709\u8fd9\u6837\u4e00\u4e2a\u573a\u666f\uff1a\u5f53\u7528\u6237\u5173\u6ce8\u5fae\u4fe1\u8d26\u53f7\u65f6\uff0c\u83b7\u53d6\u5f53\u524d\u7528\u6237\u4fe1\u606f\uff0c\u7136\u540e\u5c06\u4fe1\u606f\u5199\u5230\u6570\u636e\u5e93\u4e2d\u3002\u7c7b\u4f3c\u4e8epc\u7aef\u7f51\u7ad9\u7684\u6ce8\u518c\u3002\u53ef\u80fd\u7531\u4e8e\u8fd9\u4e2a\u5173\u6ce8\u4e8b\u4ef6\u4e2d\uff0c\u6211\u4eec\u9700\u8981\u5904\u7406\u7684\u4e1a\u52a1\u903b\u8f91\u6bd4\u8f83\u590d\u6742\u3002\u5982\u9001\u79ef\u5206\u554a\uff0c\u5199\u7528\u6237\u65e5\u5fd7\u554a\uff0c\u5206\u914d\u7528\u6237\u7ec4\u554a\u3002\u7b49\u7b49\u2026\u2026\u4e00\u7cfb\u5217\u7684\u903b\u8f91\u9700\u8981\u6267\u884c\uff0c\u6216\u8005\u7f51\u7edc\u73af\u5883\u6bd4\u8f83\u590d\u6742\uff0c\u65e0\u6cd5\u4fdd\u8bc15\u79d2\u5185\u54cd\u5e94\u5f53\u524d\u7528\u6237\u7684\u64cd\u4f5c\uff0c\u90a3\u5982\u679c\u5f53\u64cd\u4f5c\u5c1a\u672a\u5b8c\u6210\uff0c\u5fae\u4fe1\u670d\u52a1\u5668\u53c8\u7ed9\u6211\u4eec\u7684\u670d\u52a1\u5668\u63a8\u9001\u4e86\u4e00\u6761\u76f8\u540c\u7684\u5173\u6ce8\u4e8b\u4ef6\uff0c\u6211\u4eec\u5c06\u518d\u6b21\u6267\u884c\u6211\u4eec\u7684\u90a3\u4e9b\u903b\u8f91\uff0c\u8fd9\u6837\u5c31\u6709\u53ef\u80fd\u5bfc\u81f4\u6570\u636e\u5e93\u4e2d\u51fa\u73b0\u91cd\u590d\u7684\u6570\u636e\uff08\u6709\u7684\u7ae5\u978b\u5c31\u4f1a\u8bf4\u4e86\uff0c\u6211\u5728\u63d2\u5165\u6570\u636e\u4e4b\u524d\u5148\u5224\u65ad\u5f53\u524d\u662f\u5426\u5df2\u7ecf\u5b58\u5728\u4e86\uff0c\u5982\u679c\u5b58\u5728\u4e86\u5c31\u4e0d\u6267\u884c\u63d2\u5165\u7684\u64cd\u4f5c\u3002\u6211\u60f3\u8bf4\u7684\u662f\uff0c\u6211\u5f53\u521d\u4e5f\u662f\u8fd9\u6837\u60f3\u7684\uff0c\u4f46\u771f\u5b9e\u7684\u8fd0\u884c\u73af\u5883\u548c\u6211\u4eec\u7684\u8c03\u8bd5\u73af\u5883\u8fd8\u662f\u6709\u5dee\u8ddd\u7684\uff0c\u76f4\u5230\u53d1\u73b0\u6570\u636e\u5e93\u4e2d\u6709\u4e0d\u5c11\u91cd\u590d\u7684\u7528\u6237\u4fe1\u606f\u65f6\uff0c\u6211\u624d\u53d1\u73b0\u6d88\u606f\u53bb\u91cd\u7684\u91cd\u8981\u6027\u3002\uff09\u3002 &nbsp;\u6d88\u606f\u7684\u53bb\u91cd\u666e\u901a\u6d88\u606f\u548c\u4e8b\u4ef6\u6d88\u606f\u662f\u6709\u533a\u522b\u7684\u3002\u666e\u901a\u6d88\u606f\u4f7f\u7528msgid,\u800c\u4e8b\u4ef6\u6d88\u606f\u4f7f\u7528FromUserName + CreateTime\u3002\u6211\u7684\u601d\u8def\u662f\uff1a&nbsp;\u65b0\u5efa\u7c7bBaseMsg\uff0c\u6709\u4e09\u4e2a\u5c5e\u6027\u5206\u522b\u662fFromUser\uff0cMsgFlag\uff0cCreateTime\u3002\u4ee3\u7801\u5982\u4e0b\uff1a \u4ee3\u7801\u5982\u4e0b: public&nbsp;class&nbsp;BaseMsg { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;summary&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;\u53d1\u9001\u8005\u6807\u8bc6 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;\/summary&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;FromUser&nbsp;{&nbsp;get;&nbsp;set;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;summary&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;\u6d88\u606f\u8868\u793a\u3002\u666e\u901a\u6d88\u606f\u65f6\uff0c\u4e3amsgid\uff0c\u4e8b\u4ef6\u6d88\u606f\u65f6\uff0c\u4e3a\u4e8b\u4ef6\u7684\u521b\u5efa\u65f6\u95f4 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;\/summary&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;MsgFlag&nbsp;{&nbsp;get;&nbsp;set;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;summary&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;\u6dfb\u52a0\u5230\u961f\u5217\u7684\u65f6\u95f4 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;\/summary&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;DateTime&nbsp;CreateTime&nbsp;{&nbsp;get;&nbsp;set;&nbsp;} } \u767b\u5f55\u540e\u590d\u5236 &nbsp;\u521b\u5efa\u4e2a\u9759\u6001\u5217\u8868_queue\uff0c\u7528\u6765\u5b58\u50a8\u6d88\u606f\u5217\u8868\uff0c\u5217\u8868\u7684\u7c7b\u578b\u662fList . \u5728\u5904\u7406\u5fae\u4fe1\u6d88\u606f\u4f53\u524d\uff0c\u9996\u5148\u5224\u65ad\u5217\u8868\u662f\u5426\u5b9e\u4f8b\u5316\uff0c\u5982\u679c\u6ca1\u6709\u5b9e\u4f8b\u5316\u5219\u5b9e\u4f8b\u5316\uff0c\u5426\u5219\u5224\u65ad\u5217\u8868\u7684\u957f\u5ea6\u662f\u5426\u5927\u4e8e\u6216\u7b49\u4e8e50\uff08\u8fd9\u4e2a\u53ef\u4ee5\u81ea\u5b9a\u4e49\uff0c\u7528\u5904\u5c31\u662f\u5fae\u4fe1\u5e76\u53d1\u7684\u6d88\u606f\u91cf\uff09\uff0c\u5982\u679c\u5927\u4e8e\u6216\u7b49\u4e8e50\uff0c\u5219\u4fdd\u755920\u79d2\u5185\u672a\u54cd\u5e94\u7684\u6d88\u606f\uff085\u79d2\u91cd\u8bd5\u4e00\u6b21\uff0c\u603b\u5171\u91cd\u8bd53\u6b21\uff0c\u5c31\u662f15\u79d2\uff0c\u4fdd\u9669\u8d77\u89c1\u8fd9\u91cc\u519920\u79d2\uff09\u3002 \u83b7\u53d6\u5f53\u524d\u6d88\u606f\u4f53\u7684\u6d88\u606f\u7c7b\u578b\uff0c\u5e76\u6839\u636e_queue\u5224\u65ad\u5f53\u524d\u6d88\u606f\u662f\u5426\u5df2\u7ecf\u8bf7\u6c42\u4e86\u3002\u5982\u679c\u662f\u4e8b\u4ef6\u5219\u4fdd\u5b58FromUser\u548c\u521b\u5efa\u65f6\u95f4\u3002\u5982\u679c\u662f\u666e\u901a\u6d88\u606f\u5219\u4fdd\u5b58MsgFlag\u3002\u4e0b\u9762\u662f\u4ee3\u7801\uff1a \u4ee3\u7801\u5982\u4e0b: if&nbsp;(_queue&nbsp;==&nbsp;null) { &nbsp;_queue&nbsp;=&nbsp;new&nbsp;List&lt;basemsg&gt;(); } else&nbsp;if(_queue.Count&amp;gt;=50) { &nbsp;_queue&nbsp;=&nbsp;_queue.Where(q&nbsp;=&amp;gt;&nbsp;{&nbsp;return&nbsp;q.CreateTime.AddSeconds(20)&nbsp;&amp;gt;&nbsp;DateTime.Now;&nbsp;}).ToList();\/\/\u4fdd\u755920\u79d2\u5185\u672a\u54cd\u5e94\u7684\u6d88\u606f } XElement&nbsp;xdoc&nbsp;=&nbsp;XElement.Parse(xml); var&nbsp;msgtype&nbsp;=&nbsp;xdoc.Element(&#8220;MsgType&#8221;).Value.ToUpper(); var&nbsp;FromUserName&nbsp;=&nbsp;xdoc.Element(&#8220;FromUserName&#8221;).Value; var&nbsp;MsgId&nbsp;=&nbsp;xdoc.Element(&#8220;MsgId&#8221;).Value; var&nbsp;CreateTime&nbsp;=&nbsp;xdoc.Element(&#8220;CreateTime&#8221;).Value; MsgType&nbsp;type&nbsp;=&nbsp;(MsgType)Enum.Parse(typeof(MsgType),&nbsp;msgtype); if&nbsp;(type!=MsgType.EVENT) { &nbsp;if&nbsp;(_queue.FirstOrDefault(m&nbsp;=&amp;gt;&nbsp;{&nbsp;return&nbsp;m.MsgFlag&nbsp;==&nbsp;MsgId;&nbsp;})&nbsp;==&nbsp;null) &nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_queue.Add(new&nbsp;BaseMsg &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;CreateTime&nbsp;=&nbsp;DateTime.Now, &nbsp;&nbsp;FromUser&nbsp;=&nbsp;FromUserName, &nbsp;&nbsp;MsgFlag&nbsp;=&nbsp;MsgId &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;} &nbsp;else &nbsp;{ [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19],"tags":[],"class_list":["post-29162","post","type-post","status-publish","format-standard","hentry","category-19"],"_links":{"self":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/29162","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/comments?post=29162"}],"version-history":[{"count":0,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/29162\/revisions"}],"wp:attachment":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/media?parent=29162"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/categories?post=29162"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/tags?post=29162"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}