У меня есть Soap WebService с некоторыми WebMethods.
Некоторые из этих WebMethods получают входные параметры и отправляют выходное значение, а также отправляют и настраиваемый класс в своем заголовке (или, по крайней мере, это то, что я хочу).
Я читал о заголовке SOAP, и в какой-то момент у меня был метод, работающий с классом костюма как в заголовках запросов, так и в заголовках ответов.
Не уверен, что я сделал, но теперь код не работает.
ПРИМЕЧАНИЕ. Я использую SOAP UI для тестирования.
[SoapHeader("npuHeader", Direction = SoapHeaderDirection.Out)]
public string obterSiteDocumentacaoUrl(NpuHeader npuHeader, string pedido)
{
string url = null;
if (validaNpuHeader(ref npuHeader))
{
url = dataAccess.obterSiteDocumentacaoUrl(pedido);
}
npuHeader.correlationNPU = npuHeader.npu;
npuHeader.npu = CreateNPU("", "");
npuHeader.systemCode = SistemaOrigem;
npuHeader.creationTime = DateTime.Now;
npuHeader.operationDate = DateTime.Now;
return url;
}
[Serializable]
public class NpuHeader : SoapHeader
{
public NpuHeader() { }
public string npu { get; set; }
public string correlationNPU { get; set; }
public string systemCode { get; set; }
public DateTime creationTime { get; set; }
public DateTime operationDate { get; set; }
public List<GeneralResponseSuccess> responseSuccess { get; set; }
}
[Serializable]
public class GeneralResponseSuccess
{
public string errorCode { get; set; }
public string message { get; set; }
public string description { get; set; }
public GeneralResponseSuccess() { }
public GeneralResponseSuccess(string errorCode, string message, string description)
{ this.errorCodeField = errorCode; this.messageField = message; this.descriptionField = description; }
public GeneralResponseSuccess(WebServiceBusinessResult error, string description)
{
this.errorCode = error.errorCode;
this.message = error.message;
this.description = description;
}
}
Вот тест:
ЗАПРОС
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/">
<soapenv:Header/>
<soapenv:Body>
<tem:obterSiteDocumentacaoUrl>
<tem:npuHeader>
<tem:npu>12345678901234567890123456789012345678901234567890</tem:npu>
<tem:systemCode>0253</tem:systemCode>
<tem:creationTime>2015-06-17T00:00:00</tem:creationTime>
<tem:operationDate>2015-06-17T00:00:00</tem:operationDate>
</tem:npuHeader>
<tem:pedido>11SEB9999</tem:pedido>
</tem:obterSiteDocumentacaoUrl>
</soapenv:Body>
</soapenv:Envelope>
ОТКЛИК
<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>
<obterSiteDocumentacaoUrlResponse xmlns="http://tempuri.org/">
<obterSiteDocumentacaoUrlResult>www.google.com</obterSiteDocumentacaoUrlResult>
</obterSiteDocumentacaoUrlResponse>
</soap:Body>
</soap:Envelope>
Если я проверю вкладку заголовка в пользовательском интерфейсе SOAP, объект NPUHeader отсутствует.
Данные ответа заголовка
X-AspNet-Version : 2.0.50727
Date : Mon, 22 Jun 2015 13:53:18 GMT
Content-Length : 422
#status# : HTTP/1.1 200 OK
Content-Type : text/xml; charset=utf-8
Connection : Close
Server : ASP.NET Development Server/9.0.0.0
Cache-Control : private, max-age=0