/// <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); }
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); }