コード例 #1
0
        /// <summary>
        /// 初始化参数与头部信息
        /// </summary>
        /// <param name="request"></param>
        /// <param name="headers"></param>
        /// <param name="input"></param>
        private void RequestInit(Method method, RestRequest request, Dictionary <string, string> headers, MNSRequest input)
        {
            if (!headers.ContainsKey(HeaderConst.HOST))
            {
                headers[HeaderConst.HOST] = this.host;
            }
            if (!headers.ContainsKey(HeaderConst.DATE))
            {
                headers[HeaderConst.DATE]       = DateTime.Now.ToUniversalTime().ToString("r");
                headers[HeaderConst.X_MNS_DATE] = DateTime.Now.ToUniversalTime().ToString("r");
            }
            if (!headers.ContainsKey(HeaderConst.MQVERSION))
            {
                headers[HeaderConst.MQVERSION] = this.version;
            }

            //如果request不为空,需指定content-type,否则签名无法通过
            if (input != null)
            {
                headers[HeaderConst.CONTENTTYPE] = "text/xml";
            }

            //headers[HeaderConst.CONTENTMD5]  =m
            headers[HeaderConst.AUTHORIZATION] = Authorization(method, headers, request.Resource);
            foreach (var kv in headers)
            {
                request.AddHeader(kv.Key, kv.Value);
            }

            if (input != null)
            {
                request.AddBody(input);
            }
        }
コード例 #2
0
        /// <summary>
        /// 同步执行api
        /// </summary>
        /// <typeparam name="TR"></typeparam>
        /// <param name="method"></param>
        /// <param name="resource"></param>
        /// <param name="headers"></param>
        /// <param name="input"></param>
        /// <returns></returns>
        internal TR Execute <TR>(Method method, string resource, Dictionary <string, string> headers, MNSRequest input = null) where TR : MNSResponse, new()
        {
            //var restClient = new RestClient(this.url);
            var request = new RestRequest(resource, this.Map(method))
            {
                RequestFormat = DataFormat.Xml
            };

            this.RequestInit(method, request, headers, input);

            var task = new TaskCompletionSource <TR>();

            var responseasync = restClient.ExecuteAsync <TR>(request, response => {
                if (response.Data != null)
                {
                    task.SetResult(response.Data);
                }
                else if (response.StatusCode == System.Net.HttpStatusCode.OK || response.StatusCode == System.Net.HttpStatusCode.NoContent)
                {
                    task.SetResult(null);
                }
                else if (response.StatusCode == HttpStatusCode.Created)
                {
                    task.SetResult(null);
                }
                else
                {
                    ;
                    task.SetException(new MNSRequestException(string.Format("{0}:{1}", response.StatusCode, response.ErrorMessage)));
                }
            });

            Task.WaitAll(task.Task);
            return(task.Task.Result);
        }
コード例 #3
0
        /// <summary>
        /// 异步执行api,主用用在popmessage上,当queue的长轮询等待时间大于0时可以非阻塞执行代码
        /// </summary>
        /// <typeparam name="TR"></typeparam>
        /// <param name="method"></param>
        /// <param name="resource"></param>
        /// <param name="headers"></param>
        /// <param name="callBack"></param>
        /// <param name="input"></param>
        internal void ExecuteAsync <TR>(Method method, string resource, Dictionary <string, string> headers, Action <TR> callBack, MNSRequest input = null) where TR : MNSResponse, new()
        {
            //var restClient = new RestClient(this.url);
            var request = new RestRequest(resource, this.Map(method))
            {
                RequestFormat = DataFormat.Xml
            };

            this.RequestInit(method, request, headers, input);

            restClient.ExecuteAsync <TR>(request, IRR => {
                callBack(IRR.Data);
            });
        }