Я создал службу asmx для существующего клиента. Служба работает нормально из пользовательского интерфейса SOAP, но при вызове из внешнего клиента входные параметры становятся нулевыми. Я попытался вызвать службу из консольного приложения с помощью httpWebRequest (без добавления ссылки на службу), проблема не устранена. Кажется, это происходит только при вызове службы через https.
Как ни странно, параметры soapheader идут правильно.
Клиент отправляет SoapAction как пустое и не может быть изменено, поэтому используется
[SoapDocumentMethodAttribute(Action = "")]
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Validate : System.Web.Services.WebService
{
private WSSEDraftSecurityHeader _security;
public WSSEDraftSecurityHeader Security
{
get { return _security; }
set { _security = value; }
}
[WebMethod]
[SoapDocumentMethodAttribute(Action = "")]
[SoapHeader("Security", Direction = SoapHeaderDirection.InOut)]
public ValidateResponse.validateResult validate(DateTime dt, string ac, string tc, string ot, string o, int sn, string bpb)
{
}
}
Запрос на мыло:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> <s:Header> <o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> <o:UsernameToken u:Id="uuid-9b091270-fad3-4cf7-bef5-58b9a57ed37e-9"> <o:Username>XXXXX</o:Username> <o:Password>iiiiii</o:Password> </o:UsernameToken> </o:Security> </s:Header> <s:Body> <validate xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/"> <ac>SN</ac> <bpb>TTFD</bpb> <o>PXPXS1</o> <ot>port</ot> <sn>0</sn> <tc>T2</tc> <dt>2019-04-17T18:50:36.3259364+08:00</dt> </validate> </s:Body> </s:Envelope>
Веб-метод вызывается и проходит проверку заголовка безопасности. Но все строковые параметры имеют нулевое значение, а один параметр даты и времени имеет дату по умолчанию 01/01/0001
.