最近在做项目的时候遇到需要与客户的组织信息资料进行webservice对接,需要用客户指定的xml格式。
格式如下:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/">
<soapenv:Header/>
<soapenv:Body>
<ns1:getABSByEmplidAndMonthResponse xmlns:ns1="websercxf">
<return>
<message>success</message>
<status>200</status>
<result>
<EMPLID>XXX</EMPLID>
<GPFR_RATE1>XXX</GPFR_RATE1>
<GPFR_RATE2>XXX</GPFR_RATE2>
<GPFR_RATE3>XXX</GPFR_RATE3>
<GPFR_RATE4>XXX</GPFR_RATE4>
<MEALS_SUB>XXX</MEALS_SUB>
</result>
</return>
</ns1:getABSByEmplidAndMonthResponse>
</soapenv:Body>
</soapenv:Envelope>
C# webservice 写法
注意:soap.Append拼接的字段里面不能有多余的空格
private string _returnstr(string message, string status, DataTable dt)
{
StringBuilder soap = new StringBuilder(); //构造请求报文
soap.Append("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:tem=\"http://tempuri.org/\">");
soap.Append("<soapenv:Body>");
soap.Append("<ns1:getABSByEmplidAndMonthResponse xmlns:ns1='websercxf'>");
soap.Append("<return>");
soap.AppendFormat("<message>{0}</message>", message);
soap.AppendFormat("<status>{0}</status>", status);
if (status == "200")
{
soap.Append("<result>");
soap.AppendFormat("<EMPLID>{0}</EMPLID>", dt.Rows[0][0].ToString());
soap.AppendFormat("<GPFR_RATE1>{0}</GPFR_RATE1>", dt.Rows[0][1].ToString());
soap.AppendFormat("<GPFR_RATE2>{0}</GPFR_RATE2>", dt.Rows[0][2].ToString());
soap.AppendFormat("<GPFR_RATE3>{0}</GPFR_RATE3>", dt.Rows[0][3].ToString());
soap.AppendFormat("<GPFR_RATE4>{0}</GPFR_RATE4>", dt.Rows[0][4].ToString());
soap.AppendFormat("<MEALS_SUB>XXX</MEALS_SUB>", dt.Rows[0][5].ToString());
soap.AppendFormat("<GPFR_RATE6>{0}</GPFR_RATE6>", dt.Rows[0][6].ToString());
soap.AppendFormat("<BUS_MEALS_SUB>{0}</BUS_MEALS_SUB>", dt.Rows[0][7].ToString());
soap.Append("</result>");
}
soap.Append("</return>");
soap.Append("</ns1:getABSByEmplidAndMonthResponse>");
soap.Append("</soapenv:Body>");
soap.Append("</soapenv:Envelope>");
String requestSoap = soap.ToString();
return requestSoap;
}
[WebMethod]
public XmlDocument _getAttendanceMonthData(string employeeid, string year, string month)
{
string xmlstr = getData(employeeid, year, month);
XmlDocument XmlDoc = new XmlDocument();
XmlDoc.LoadXml(xmlstr);
return XmlDoc;
}
说明:
getData方法是将数据从数据库中搜出来,并将datatable 传给_returnstr进行拼接,并返回
因此才有:
string xmlstr = getData(employeeid, year, month);
然后在用XmlDocument接收数据,并在接口中返回XmlDocument类型的数据