Мой веб-сервис ASMX принимает SumObject, содержащий два числа, и возвращает их общую сумму в объекте SumResult.
Веб-служба:
[WebService(Namespace = "http://sample.com/sub/")]
[WebServiceBinding(ConformsTo = WsiProfiles.None)]
[System.ComponentModel.ToolboxItem(false)]
[System.Web.Script.Services.ScriptService]
public class Service : System.Web.Services.WebService
{
[WebMethod]
public SumResult SumTogether(SumObject MySum)
{
SumResult result = new SumResult();
result.total = MySum.a + MySum.b;
return result;
}
}
public class SumObject
{
public int a;
public int b;
}
public class SumResult
{
public int total;
}
Клиент SOAP Вызов:
static void TestSumTogether()
{
try
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://.../Service.asmx");
req.Headers.Add("SOAP:Action");
req.ContentType = "text/xml;charset=\"utf-8\"";
req.Accept = "text/xml";
req.Method = "POST";
XmlDocument xml = new XmlDocument();
xml.LoadXml("<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
"<SOAP:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:SOAP=\"http://schemas.xmlsoap.org/soap/envelope/\">" +
"<SOAP:Header />" +
"<SOAP:Body>" +
"<SumTogether xmlns=\"http://sample.com/sub/\">" +
"<MySum>" +
"<a>5</a>" +
"<b>6</b>" +
"</MySum>" +
"</SumTogether>" +
"</SOAP:Body>" +
"</SOAP:Envelope>");
using (Stream st = req.GetRequestStream())
{
xml.Save(st);
}
using (WebResponse res = req.GetResponse())
{
using (StreamReader sr = new StreamReader(res.GetResponseStream()))
{
string result = sr.ReadToEnd();
Console.WriteLine(result);
}
}
}
catch (Exception ex)
{
Console.WriteLine("Error: " + ex.Message + "\n" + ex.StackTrace);
}
}
Результат:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<SumTogetherResponse xmlns="http://sample.com/sub/">
<SumTogetherResult>
<total>11</total>
</SumTogetherResult>
</SumTogetherResponse>
</soap:Body>
</soap:Envelope>
Однако в ответе Я хочу удалить узел и переименовать узел в , чтобы он соответствовал имени класса объекта, поэтому перед веб-методом я добавил следующее:
[SoapDocumentMethod(ParameterStyle = SoapParameterStyle.Bare)]
[return: XmlElement("SumResult")]
Однако теперь Я получаю ошибку ниже и не могу найти решение. Пожалуйста, помогите мне определить, что я пропускаю.
Error: The remote server returned an error: (500) Internal Server Error.
at System.Net.HttpWebRequest.GetResponse()
at MyProject.Program.TestSumTogether()