Example #1
0
        /// <summary>
        /// 调用 WebAPI 服务,发送请求报文,接收响应报文后,转换成指定类型的对象
        /// </summary>
        /// <typeparam name="T">返回的对象类型</typeparam>
        /// <param name="requestObject">请求报文对象</param>
        /// <param name="result">交易结果对象</param>
        /// <returns>返回的对象</returns>
        protected T Call <T>(
            object requestObject,
            out TErrorMessage result)
        {
            string url = "";

            result = new TErrorMessage();

            switch (moduleType)
            {
            case TModuleType.Exchange:
                url =
                    string.Format(
                        "{0}{1}/{2}/{3}/{4}",
                        webAPIUrl,
                        moduleType.ToString(),
                        clientID,
                        contentType.ToString(),
                        exCode);
                break;

            default:
                string    errText = string.Format("目前不支持模块 [{0}]", moduleType.ToString());
                Exception error   = new Exception(errText);
                error.Data["ErrCode"] = 999999;
                error.Data["ErrText"] = errText;
                throw error;
            }

            switch (contentType)
            {
            case TContentType.JSON:
                break;

            default:
                string    errText = string.Format("目前不支持 [{0}] 报文格式", contentType.ToString());
                Exception error   = new Exception(errText);
                error.Data["ErrCode"] = 999999;
                error.Data["ErrText"] = errText;
                throw error;
            }

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

            request.Method            = "POST";
            request.ContentType       = "application/stream;";
            request.KeepAlive         = false;
            request.AllowAutoRedirect = true;
            request.CookieContainer   = new CookieContainer();
            request.Timeout           = 30000; // 单位:毫秒

            try
            {
                Stream stream = request.GetRequestStream();

                #region 根据传入的指定报文格式,生成交易请求对象的相应格式的报文文本
                string content = "";
                switch (contentType)
                {
                case TContentType.JSON:
                    content = requestObject.ToJSON();
                    break;

                case TContentType.XML:
                    content = requestObject.ToXML();
                    break;
                }
                #endregion

                byte[] requestContext = Encoding.UTF8.GetBytes(content);
                stream.Write(requestContext, 0, requestContext.Length);
                stream.Flush();
                stream.Close();
                Application.DoEvents();

                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                string          resJson  = "";
                using (StreamReader sr = new StreamReader(response.GetResponseStream()))
                {
                    resJson = sr.ReadToEnd();
                }

                T rtnObject = default(T);
                switch (contentType)
                {
                case TContentType.JSON:
                    result    = JsonConvert.DeserializeObject <TErrorMessage>(resJson);
                    rtnObject = JsonConvert.DeserializeObject <T>(resJson);
                    break;
                }

                result.SourceREQContent  = content;
                result.SourceRESPContent = resJson;

                return(rtnObject);
            }
            catch (Exception error)
            {
                error.Data["ErrCode"] = 999999;
                error.Data["ErrText"] = error.Message;
                throw error;
            }
        }