Я звоню на веб-сервис следующим образом:
public static void Execute()
{
var nowTS = DateTime.UtcNow.ToString("s") + "Z";
var userNr = "XXXXXX";
var username = "XXXXXX";
var password = "XXXXXX";
HttpWebRequest request = CreateWebRequest();
XmlDocument soapEnvelopeXml = new XmlDocument();
soapEnvelopeXml.LoadXml(
@"<soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:kun=""http://tempuri.org/XXXXXXXXXXXXX"">
<soapenv:Header>
<wsse:Security soapenv:mustUnderstand =""1"" xmlns:wsse =""http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"" xmlns:wsu =""http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"">
<wsse:UsernameToken xmlns:wsse=""http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"" >
<wsse:Username>" + username + @"</wsse:Username>
<wsse:Password Type=""http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"">" + password + @"</wsse:Password></wsse:UsernameToken>
<wsse:Nonce EncodingType=""http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary""></wsse:Nonce>
<wsu:Timestamp wsu:Id=""timestamp"">
<wsu:Created>" + nowTS.ToString() + @"</wsu:Created>
</wsu:Timestamp>
</wsse:Security>
</soapenv:Header>
<soapenv:Body>
<kun:kundeoverblik>
<kun:parameters>
<kun:Brugernr>" + userNr + @"</kun:Brugernr>
</kun:parameters>
</kun:kundeoverblik>
</soapenv:Body>
</soapenv:Envelope>");
using (Stream stream = request.GetRequestStream())
{
soapEnvelopeXml.Save(stream);
}
try
{
using (WebResponse response = request.GetResponse())
{
using (StreamReader rd = new StreamReader(response.GetResponseStream()))
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(response.GetResponseStream());
}
}
}
catch (WebException webException)
{
WebResponse webResponse = webException.Response;
using (Stream responseStream = webResponse.GetResponseStream())
{
if (responseStream == null) { throw; }
StreamReader reader = new StreamReader(responseStream);
String text = reader.ReadToEnd();
throw new WebException(text, webException);
}
}
}
public static HttpWebRequest CreateWebRequest()
{
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(@"http://XXXXXXXXXXXXXXXXXXXX");
webRequest.Headers.Add(@"SOAP:Action");
webRequest.ContentType = "text/xml;charset=\"utf-8\"";
webRequest.Accept = "text/xml";
webRequest.Method = "POST";
return webRequest;
}
Вызов работает нормально, но я хочу использовать свойство Credentials для идентификации пользователя. Как я могу изменить мой soapEncelopeXml, чтобы я мог использовать UseDefaultCredentials вместо использования пароля и имени пользователя ??? Или это вообще возможно?
Я изо всех сил пытался заставить этот вызов работать, используя Add Service Reference / Web Reference, но не смог заставить его работать .... Так что в итоге мы нашли это решение soapEnvelopeXml.
Был бы признателен и конструктивный критик :)