예제 #1
0
        /// <summary>
        /// 将protobuf类型的下载数据响应,转换为标准的响应类型
        /// </summary>
        /// <param name="protoResult"></param>
        /// <returns></returns>
        public static GetRecordsResult ToGetRecordsResult(HuaweiCloud.DIS.Api.Protobuf.GetRecordsResult protoResult)
        {
            GetRecordsResult result = new GetRecordsResult();

            result.NextShardIterator = protoResult.NextShardIterator;

            List <Record> records = new List <Record>();

            foreach (HuaweiCloud.DIS.Api.Protobuf.Record protoRecord in protoResult.Records)
            {
                Record record = new Record();

                record.SequenceNumber = protoRecord.SequenceNumber;
                record.PartitionKey   = protoRecord.PartitionKey;
                if (protoRecord.ToByteArray() != null)
                {
                    record.Data = protoRecord.Data.ToByteArray();
                }
                record.Timestamp = protoRecord.Timestamp;
                if (!string.IsNullOrEmpty(protoRecord.TimestampType))
                {
                    record.TimestampType = protoRecord.TimestampType;
                }

                records.Add(record);
            }
            result.Records = records;

            return(result);
        }
        /// <summary>
        /// 下载
        /// </summary>
        /// <param name="getRecordsParam"></param>
        /// <returns></returns>
        public new GetRecordsResult GetRecords(GetRecordsRequest getRecordsParam)
        {
            ObsWebServiceRequest obsWebServiceRequest = new DISWebServiceRequest();
            IRequest             requestobs           = new DISDefaultRequest(obsWebServiceRequest, Constants.SERVICENAME)
            {
                HttpMethod = HttpMethodName.GET.ToString()
            };

            string resourcePath = ResourcePathBuilder.Standard()
                                  .WithProjectId(_disConfig.GetProjectId())
                                  .WithResource(new RecordResource(null))
                                  .Build();

            requestobs.ResourcePath = resourcePath;
            GetRecordsResult result = null;

            if (_disConfig.GetBodySerializeType().ToLower().Equals(BodySerializeType.Protobuf.ToString().ToLower()))
            {
                requestobs.Headers.Add("Content-Type", "application/x-protobuf; charset=utf-8");
                requestobs.Headers.Add("accept", "*/*");
                result = Request <GetRecordsResult>(getRecordsParam, requestobs, InterfaceType.DISInterfaceGetRecords);
            }
            else
            {
                result = Request <GetRecordsResult>(getRecordsParam, requestobs);
            }

            result = DecorateRecords(result);
            return(result);
        }
예제 #3
0
        public String ProtobufExecute(string baseUrl, string resource, IDictionary <string, string> headerMaps, object req)
        {
            HttpWebRequest request;
            string         url = baseUrl.TrimEnd('/') + resource.TrimEnd('/') + "?";

            var tmpJson      = JsonConvert.SerializeObject(req);
            var getParamsObj = JsonConvert.DeserializeObject <Dictionary <string, object> >(tmpJson);

            if (null != getParamsObj)
            {
                foreach (var o in getParamsObj)
                {
                    url += o.Key + "=" + o.Value;
                }
            }

            //如果是发送HTTPS请求
            if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
            {
                ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
                request = WebRequest.Create(url) as HttpWebRequest;
                request.ProtocolVersion = HttpVersion.Version10;
            }
            else
            {
                request = WebRequest.Create(url) as HttpWebRequest;
            }
            request.Method            = "GET";
            request.Timeout           = 15000;
            request.AllowAutoRedirect = false;
            foreach (KeyValuePair <string, string> keyValuePair in headerMaps)
            {
                if (keyValuePair.Key.Equals("Content-Type"))
                {
                    request.ContentType = keyValuePair.Value;
                }
                else if (keyValuePair.Key.Equals("accept"))
                {
                    request.Accept = keyValuePair.Value;
                }
                else if (keyValuePair.Key.Equals("Host"))
                {
                    request.Host = keyValuePair.Value;
                }
                else
                {
                    request.Headers.Add(keyValuePair.Key, keyValuePair.Value);
                }
            }

            WebResponse response    = null;
            string      responseStr = null;
            int         statusCode  = 0;

            try
            {
                response   = request.GetResponse();
                statusCode = (int)((HttpWebResponse)response).StatusCode;
                if (statusCode >= 200 && statusCode < 300)
                {
                    Stream responseStream = response.GetResponseStream();
                    HuaweiCloud.DIS.Api.Protobuf.GetRecordsResult        protoResult = HuaweiCloud.DIS.Api.Protobuf.GetRecordsResult.Parser.ParseFrom(responseStream);
                    Com.Bigdata.Dis.Sdk.DISCommon.Model.GetRecordsResult result      = ProtobufUtils.ToGetRecordsResult(protoResult);
                    if (result != null)
                    {
                        responseStr = JsonConvert.SerializeObject(result);
                    }
                    else
                    {
                        logger.Warn(statusCode.ToString() + "\n" + "Protobuf ParseFrom Stream failed.");
                        throw new Exception(statusCode.ToString() + "\n" + "Protobuf ParseFrom Stream failed.");
                    }
                }
                else
                {
                    Stream       responseStream = response.GetResponseStream();
                    StreamReader readStream     = new StreamReader(responseStream, System.Text.Encoding.GetEncoding("utf-8"));
                    string       errInfo        = readStream.ReadToEnd();
                    throw new Exception(statusCode.ToString() + "\n" + errInfo);
                }
            }
            catch (Exception e)
            {
                throw new Exception(statusCode.ToString() + "\n" + e.Message);
            }
            finally
            {
                request  = null;
                response = null;
            }

            return(responseStr);
        }