Próba stworzenia klienta C # (zostanie opracowany jako usługa Windows), który wysyła żądania SOAP do usługi internetowej (i pobiera wyniki).
Z tego pytania widziałem ten kod:
protected virtual WebRequest CreateRequest(ISoapMessage soapMessage)
{
var wr = WebRequest.Create(soapMessage.Uri);
wr.ContentType = "text/xml;charset=utf-8";
wr.ContentLength = soapMessage.ContentXml.Length;
wr.Headers.Add("SOAPAction", soapMessage.SoapAction);
wr.Credentials = soapMessage.Credentials;
wr.Method = "POST";
wr.GetRequestStream().Write(Encoding.UTF8.GetBytes(soapMessage.ContentXml), 0, soapMessage.ContentXml.Length);
return wr;
}
public interface ISoapMessage
{
string Uri { get; }
string ContentXml { get; }
string SoapAction { get; }
ICredentials Credentials { get; }
}
Wygląda ładnie, ktoś wie, jak go używać i czy to najlepsza praktyka?
c#
soap
webservice-client
Baza danych
źródło
źródło
Mam tutaj to proste rozwiązanie :
Wysyłanie żądania SOAP i odbieranie odpowiedzi w .NET 4.0 C # bez użycia klas WSDL lub proxy:
źródło
webRequest.Headers.Add("SOAPAction", "http://tempuri.org/.....");
Check the SOAP Action w SoapUI i użyj tego.Najlepszą praktyką jest odwoływanie się do WSDL i używanie go jako odwołania do usługi WWW. Jest to łatwiejsze i działa lepiej, ale jeśli nie masz WSDL, definicje XSD są dobrym fragmentem kodu.
źródło
Myślę, że jest prostszy sposób:
źródło
Napisałem bardziej ogólną klasę pomocniczą, która akceptuje słownik oparty na ciągach znaków niestandardowych parametrów, dzięki czemu mogą być ustawiane przez wywołującego bez konieczności ich twardego kodowania. Jest rzeczą oczywistą, że takiej metody należy używać tylko wtedy, gdy chcesz (lub potrzebujesz) ręcznie wydać usługę sieciową opartą na SOAP: w większości scenariuszy zalecanym podejściem byłoby użycie WSDL usługi sieci Web razem z dodatkiem Service Reference Visual Studio funkcja zamiast.
Aby uzyskać dodatkowe informacje i szczegóły dotyczące tej klasy, możesz również przeczytać ten post na moim blogu.
źródło
To jest mój ostateczny kod po 2 dniach wyszukiwania w Google na temat dodawania przestrzeni nazw i wysyłania żądania mydła wraz z kopertą SOAP bez dodawania serwera proxy / odwołania do usługi
źródło
Wywołaj usługę sieciową SOAP w języku C #
źródło
new UpdatedOutlookServiceReferenceAPI.OutlookServiceSoapClient()
?