/// <summary> /// 发送请求(核心) /// </summary> /// <param name="method">请求的方法</param> /// <param name="sendData">请求参数 (可变参数与服务端参数一致)</param> /// <returns></returns> private string SendCore(string method, params object[] sendData) { try { //若存在webservice类 执行反射调用 if (_type != null) { var ret = Fun(method, sendData); return(ret == null ? null : CoreConvert.ObjToJsonData(ret)); } string result; var httpWebRequest = (HttpWebRequest)WebRequest.Create(ServiceUrl + "/WebSrviceSoap"); httpWebRequest.Method = "POST"; httpWebRequest.ContentType = "text;charset=UTF-8"; //这个在非GET的时候,一定要加上,如果服务器返回错误,他还会继续再去请求,不会使用之前的错误数据做返回数据 httpWebRequest.ServicePoint.Expect100Continue = false; var datas = sendData == null || sendData.Length == 0 ? string.Empty : CoreConvert.ObjToJsonData(sendData.Select(CoreConvert.ObjToJsonData).ToList()); var tmpData = new SendData { Method = method, Datas = datas }; var data = Encoding.UTF8.GetBytes(CoreConvert.ObjToJsonData(tmpData)); httpWebRequest.ContentLength = data.Length; var outStream = httpWebRequest.GetRequestStream(); outStream.Write(data, 0, data.Length); outStream.Close(); var webResponse = httpWebRequest.GetResponse(); var httpWebResponse = (HttpWebResponse)webResponse; var stream = httpWebResponse.GetResponseStream(); if (stream != null) { var streamReader = new StreamReader(stream, Encoding.GetEncoding("UTF-8")); result = streamReader.ReadToEnd(); streamReader.Close(); stream.Close(); } else { result = string.Empty; } return(result); } catch (Exception ex) { throw new Exception("HttpErr" + " uri:" + ServiceUrl + " method:" + method + " httpData:" + sendData + "err:" + ex); } }
/// <summary> /// 执行服务器方法 /// </summary> /// <param name="mi">方法</param> /// <param name="pos">参数</param> /// <returns></returns> private string Fun(MethodBase mi, object[] pos) { try { //创建实例 var o = Activator.CreateInstance(_serviceClass); //调用方法 if (mi != null) { return(CoreConvert.ObjToJsonData(mi.Invoke(o, pos))); } CoreLog.Error("方法不能为空"); return(null); } catch (Exception ex) { CoreLog.Error("方法:" + mi?.Name + "执行错误:" + ex); throw new Exception(ex.Message); } }