调用webservice获取base64保存到指定路径
/// <summary>
/// 通过接口获取模板文件
/// </summary>
private bool GetWebServiceData()
{
string url = "http://oatest.chinafastprint.com:8090/sys/webservice/icsFileService";//如果是?wsdl结尾的 需要把?wsdl删除掉
string contenttype = "text/xml;charset=utf-8";
Hashtable header = new Hashtable();
//header.Add("SOAPAction", "上面获取到的SOAPAction地址");
string data = LoadXmls(textBoxX_FormNo.Text.Trim());//这里是传递参数,拼接正规的完整xml入参
string filexml = Http(url, "post", contenttype, header, data);
XmlDocument doc1 = new XmlDocument();
doc1.LoadXml(filexml); //将获取到的结果加载为xml对象
string model = doc1.InnerText;//直接读取返回值 也就是cdata内部的内容
if (model.Length <= 2)
{
MessageBoxEx.Show($"找不到对应的记录,错误代码:{model}");
return false;
}
else
{
try
{
byte[] fileData = Convert.FromBase64String(model);
string fileName = textBoxX_FormNo.Text.Trim() + textBoxX_Formtitle.Text.Trim() + ".xlsx";
string dirPath = textBoxX2.Text.Trim();
if (!Directory.Exists(dirPath))
{
Directory.CreateDirectory(dirPath);
}
string filePath = Path.Combine(dirPath, fileName);
if (System.IO.File.Exists(filePath))
{
System.IO.File.Delete(filePath);
}
FileStream fs = new FileStream(filePath, FileMode.CreateNew);
BinaryWriter bw = new BinaryWriter(fs);
bw.Write(fileData, 0, fileData.Length);
bw.Close();
fs.Close();
return true;
}
catch (Exception ex)
{
MessageBoxEx.Show(ex.Message);
return false;
}
}
}
/// <summary>
/// 接口入参拼接
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
private string LoadXmls(string data)
{
XmlDocument doc1 = new XmlDocument();
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.Append($"<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:web='http://webservice.review.km.kmss.landray.com/'>" +
$"<soapenv:Header/>" +
$"<soapenv:Body>" +
$"<web:getFile>" +
$"<arg0>{data}</arg0>" +
$"</web:getFile>" +
$"</soapenv:Body>" +
$"</soapenv:Envelope>");
return stringBuilder.ToString();
}
/// <summary>
/// 调用soap协议接口 webservice wsdl
/// </summary>
/// <param name="url"></param>
/// <param name="method"></param>
/// <param name="contenttype"></param>
/// <param name="header"></param>
/// <param name="data"></param>
/// <returns></returns>
private static string Http(string url, string method = "post", string contenttype = "text/xml;charset=utf-8", Hashtable header = null, string data = null)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = string.IsNullOrEmpty(method) ? "post" : method;
request.ContentType = string.IsNullOrEmpty(contenttype) ? "text/xml;charset=utf-8" : contenttype;
if (header != null)
{
foreach (var i in header.Keys)
{
request.Headers.Add(i.ToString(), header[i].ToString());
}
}
if (!string.IsNullOrEmpty(data))
{
Stream RequestStream = request.GetRequestStream();
byte[] bytes = Encoding.UTF8.GetBytes(data);
RequestStream.Write(bytes, 0, bytes.Length);
RequestStream.Close();
}
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream ResponseStream = response.GetResponseStream();
StreamReader StreamReader = new StreamReader(ResponseStream, Encoding.GetEncoding("utf-8"));
string re = StreamReader.ReadToEnd();
StreamReader.Close();
ResponseStream.Close();
return re;
}