using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Web;
namespace WMS.Util
{
public static class WebServiceCall
{
public static string getsoapresource(string url, string datastr)
{
try
{
//Encoding encoding = Encoding.GetEncoding("utf-8");
Encoding encoding = Encoding.GetEncoding("GB2312");
byte[] data = encoding.GetBytes(datastr);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
//发送数据
request.Method = "POST";
request.ContentType = "Content-Type:text/xml;charset=utf-8";
request.ContentLength = data.Length;
Stream requestStream = request.GetRequestStream();
requestStream.Write(data, 0, data.Length);
requestStream.Close();
//接收返回值
HttpWebResponse res = (HttpWebResponse)request.GetResponse();
StreamReader sReader = new StreamReader(res.GetResponseStream(), System.Text.Encoding.UTF8);
string strBack = sReader.ReadToEnd();
//Response.Write(strBack);
sReader.Close();
res.Close();
return strBack;
}
catch (Exception ex)
{
throw ex;
}
}
//public static string mUrl = "http://localhost:53342/WebService.asmx";
///
/// 调用接口
///
/// 方法名称
/// 参数名称
/// 返回值
public static string callWebService(string mUrl, string methodName, string param)
{
//Encoding encoding = Encoding.GetEncoding("utf-8");
Encoding encoding = Encoding.GetEncoding("utf-8");
//获取请求数据
byte[] data = getRequestDataALL(methodName, param); // getRequestData(methodName, param);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(mUrl);
request.Method = "POST";
request.ContentType = "Content-Type:text/xml;charset=utf-8";
string mSoapAction = "http://tempuri.org/" + methodName;
request.Headers.Add("SOAPAction", mSoapAction);
request.ContentLength = data.Length;
Stream rStream = request.GetRequestStream();
rStream.Write(data, 0, data.Length);
rStream.Close();
WebResponse response = request.GetResponse();
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string result = reader.ReadToEnd();
dataStream.Close();
response.Close();
return result;
}
///
/// 获取请求内容(方法1) 适合 .Net
///
/// 方法名称
/// 参数
///
public static byte[] getRequestData(string methodName, Dictionary param)
{
StringBuilder requestData = new StringBuilder("")
.Append("")
.Append(" ")
.Append("<").Append(methodName)
.Append(" xmlns=\"http://tempuri.org/\">");
foreach (KeyValuePair item in param)
{
requestData.Append("<").Append(item.Key).Append(">")
.Append(item.Value)
.Append("").Append(item.Key).Append(">");
}
requestData.Append("").Append(methodName).Append(">")
.Append("")
.Append("");
string val = requestData.ToString();
byte[] data = Encoding.UTF8.GetBytes(val);
return data;
}
///
/// 获取数据(方法2) 兼容所有的(java soap 服务端和.net soap 服务端)
///
/// 方法名称
/// 参数
///
public static byte[] getRequestDataALL(string methodName, string param)
{
StringBuilder requestBuider = new StringBuilder();
requestBuider.Append(" ");
//requestBuider.Append("" +
// " ");
requestBuider.Append(@"
urn:services-qad-com:QADERP
urn:services-qad-com::QADERP
true
urn:services-qad-com:
");
requestBuider.Append("");
//requestBuider.Append("");
//requestBuider.Append("").Append(param).Append("");
//requestBuider.Append("");
if (methodName == "transferInventory")
{
#region 转仓
requestBuider.Append(@"
QAD
domain
AFCN
QAD
scopeTransaction
TRUE
QAD
version
eB_2
QAD
mnemonicsRaw
false
QAD
username
H3C-EDI
QAD
password
H3C-EDI
");
requestBuider.Append($"{param}");
#endregion
}
else
{
#region 工单
requestBuider.Append(@"
QAD
domain
AFCN
QAD
scopeTransaction
true
QAD
version
eB_2
QAD
mnemonicsRaw
true
QAD
username
H3C-EDI
QAD
password
H3C-EDI
");
requestBuider.Append($"{param}");
#endregion
}
requestBuider.Append($"");
requestBuider.Append("");
string val = requestBuider.ToString();
byte[] data = Encoding.UTF8.GetBytes(val);
return data;
}
}
}