public RequestImage Parse(string xml)
        {
            RequestImage info = new RequestImage();

            try
            {
                XmlDocument doc = new XmlDocument();
                doc.LoadXml(xml);
                XmlElement root         = doc.DocumentElement;
                string     ToUserName   = root.SelectSingleNode("ToUserName").InnerText;
                string     FromUserName = root.SelectSingleNode("FromUserName").InnerText;
                string     MsgType      = root.SelectSingleNode("MsgType").InnerText;
                string     PicUrl       = root.SelectSingleNode("PicUrl").InnerText;
                string     MediaId      = root.SelectSingleNode("MediaId").InnerText;
                info.ToUserName   = ToUserName;
                info.FromUserName = FromUserName;
                info.MsgType      = MsgType;
                info.PicUrl       = PicUrl;
                info.MediaId      = MediaId;
            }
            catch (Exception ex)
            {
                //1168
                throw ex;
            }
            return(info);
        }
        /// <summary>
        /// 任务分配
        /// </summary>
        /// <param name="postData"></param>
        /// <returns></returns>
        public string Dispatch(string postData)
        {
            string      responseContent = string.Empty;
            XmlDocument doc             = new XmlDocument();

            doc.LoadXml(postData);
            XmlElement root         = doc.DocumentElement;
            XmlNode    nodeMsgType  = root.SelectSingleNode("MsgType");
            string     ToUserName   = root.SelectSingleNode("ToUserName").InnerText;
            string     FromUserName = root.SelectSingleNode("FromUserName").InnerText;
            string     MsgType      = nodeMsgType.InnerText.ToLower();

            switch (MsgType)
            {
            case "text":
                try
                {
                    RequestText   reqText = new RequestText().Parse(postData);
                    StringBuilder sb      = new StringBuilder();
                    sb.AppendFormat("消息类型:{0}\r\n", reqText.MsgType);
                    sb.AppendFormat("消息内容:{0}\r\n", reqText.Content);
                    WeixinTextMessage text = new WeixinTextMessage()
                    {
                        ToUserName   = reqText.FromUserName,
                        FromUserName = reqText.ToUserName,
                        CreateTime   = HttpHelper.ConvertDateTimeToInt(DateTime.Now),
                        MsgType      = reqText.MsgType,
                        Content      = sb.ToString()
                    };
                    responseContent = text.ToXml();
                }
                catch (Exception ex)
                {
                    log.Error(ex);
                }
                break;

            case "image":
                try
                {
                    RequestImage       reqImage = new RequestImage().Parse(postData);
                    WeixinImageMessage image    = new WeixinImageMessage()
                    {
                        ToUserName   = reqImage.FromUserName,
                        FromUserName = reqImage.ToUserName,
                        CreateTime   = HttpHelper.ConvertDateTimeToInt(DateTime.Now),
                        MsgType      = reqImage.MsgType,
                        MediaId      = reqImage.MediaId
                    };
                    responseContent = image.ToXml();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                break;

            case "voice":
                try
                {
                    RequestVoice       reqVoice = new RequestVoice().Parse(postData);
                    WeixinVoiceMessage voice    = new WeixinVoiceMessage()
                    {
                        ToUserName   = reqVoice.FromUserName,
                        FromUserName = reqVoice.ToUserName,
                        CreateTime   = HttpHelper.ConvertDateTimeToInt(DateTime.Now),
                        MsgType      = reqVoice.MsgType,
                        MediaId      = reqVoice.MediaId
                    };
                    responseContent = voice.ToXml();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                break;

            case "video":
                try
                {
                    RequestVideo       reqVideo = new RequestVideo().Parse(postData);
                    WeixinVideoMessage video    = new WeixinVideoMessage()
                    {
                        ToUserName   = reqVideo.FromUserName,
                        FromUserName = reqVideo.ToUserName,
                        CreateTime   = HttpHelper.ConvertDateTimeToInt(DateTime.Now),
                        MsgType      = reqVideo.MsgType,
                        MediaId      = reqVideo.MediaId,
                        Title        = reqVideo.MediaId,
                        Description  = reqVideo.MediaId
                    };
                    responseContent = video.ToXml();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                break;

            case "shortvideo":
                RequestShortVideo reqShortVideo = new RequestShortVideo().Parse(postData);

                break;

            case "location":
                try
                {
                    RequestLocation reqLoc = new RequestLocation().Parse(postData);
                    StringBuilder   sb2    = new StringBuilder();
                    sb2.AppendFormat("消息类型:{0}\r\n", reqLoc.MsgType);
                    sb2.AppendFormat("纬度:{0}\r\n", reqLoc.Location_X);
                    sb2.AppendFormat("经度:{0}\r\n", reqLoc.Location_Y);
                    sb2.AppendFormat("地图缩放大小:{0}\r\n", reqLoc.Scale);
                    sb2.AppendFormat("地理位置信息:{0}\r\n", reqLoc.Label);
                    WeixinTextMessage location = new WeixinTextMessage()
                    {
                        ToUserName   = reqLoc.FromUserName,
                        FromUserName = reqLoc.ToUserName,
                        CreateTime   = HttpHelper.ConvertDateTimeToInt(DateTime.Now),
                        MsgType      = "text",
                        Content      = sb2.ToString()
                    };
                    responseContent = location.ToXml();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                break;

            case "link":
                try
                {
                    RequestLink   reqlink = new RequestLink().Parse(postData);
                    StringBuilder sb3     = new StringBuilder();
                    sb3.AppendFormat("消息类型:{0}\r\n", reqlink.MsgType);
                    sb3.AppendFormat("消息标题:{0}\r\n", reqlink.Title);
                    sb3.AppendFormat("消息描述:{0}\r\n", reqlink.Description);
                    sb3.AppendFormat("Url:<a href=\"{0}\">链接</a>", reqlink.Url);
                    WeixinTextMessage link = new WeixinTextMessage()
                    {
                        ToUserName   = reqlink.FromUserName,
                        FromUserName = reqlink.ToUserName,
                        CreateTime   = HttpHelper.ConvertDateTimeToInt(DateTime.Now),
                        MsgType      = "text",
                        Content      = sb3.ToString()
                    };
                    responseContent = link.ToXml();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                break;

            case "event":
                string eventName = root.SelectSingleNode("Event").InnerText.ToLower();
                log.Info("Event:" + eventName);
                switch (eventName)
                {
                case "click":
                    string key = root.SelectSingleNode("EventKey").InnerText;
                    log.Info("事件KEY值:" + key);
                    //微信菜单点击事件处理
                    WeixinMenuClickHandler(key);
                    break;

                case "subscribe":
                    log.Info(string.Format("FromUserName:{0}关注成功!", FromUserName));
                    string str = "欢迎关注WUWEI测试微信公众号!";
                    responseContent = string.Format("<xml><ToUserName><![CDATA[{0}]]></ToUserName><FromUserName><![CDATA[{1}]]></FromUserName><CreateTime>{2}</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[{3}]]></Content></xml>", FromUserName, ToUserName, HttpHelper.ConvertDateTimeToInt(DateTime.Now), str).Trim();
                    break;

                case "unsubscribe":
                    log.Info(string.Format("FromUserName:{0}取消关注!", FromUserName));
                    break;
                }
                break;
            }
            return(responseContent);
        }