Der Versuch, einen C # -Client zu erstellen (wird als Windows-Dienst entwickelt), der SOAP-Anforderungen an einen Webdienst sendet (und die Ergebnisse abruft).
Aus dieser Frage habe ich diesen Code gesehen:
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; }
}
Sieht gut aus, weiß jemand, wie man es benutzt und ob es die beste Vorgehensweise ist?
c#
soap
webservice-client
Datenbank
quelle
quelle
Ich habe diese einfache Lösung hier :
Senden einer SOAP-Anforderung und Empfangen einer Antwort in .NET 4.0 C # ohne Verwendung der WSDL- oder Proxy-Klassen:
quelle
webRequest.Headers.Add("SOAPAction", "http://tempuri.org/.....");
Überprüfen Sie die SOAP-Aktion in SoapUI und verwenden Sie diese.Die beste Vorgehensweise besteht darin, auf die WSDL zu verweisen und sie wie eine Webdienstreferenz zu verwenden. Es ist einfacher und funktioniert besser, aber wenn Sie nicht über die WSDL verfügen, sind die XSD-Definitionen ein guter Code.
quelle
Ich denke, es gibt einen einfacheren Weg:
quelle
Ich habe eine allgemeinere Hilfsklasse geschrieben, die ein auf Zeichenfolgen basierendes Wörterbuch mit benutzerdefinierten Parametern akzeptiert, damit diese vom Aufrufer festgelegt werden können, ohne sie fest codieren zu müssen. Es versteht sich von selbst, dass Sie eine solche Methode nur verwenden sollten, wenn Sie einen SOAP-basierten Webdienst manuell ausgeben möchten (oder müssen): In den meisten gängigen Szenarien wird empfohlen, die Webdienst-WSDL zusammen mit der Add Service Reference Visual Studio zu verwenden Funktion stattdessen.
Für weitere Informationen und Details zu dieser Klasse können Sie diesen Beitrag auch in meinem Blog lesen .
quelle
Dies ist also mein endgültiger Code, nachdem ich 2 Tage lang gegoogelt habe, wie man einen Namespace hinzufügt und zusammen mit dem SOAP-Umschlag eine Seifenanforderung stellt, ohne Proxy / Servicereferenz hinzuzufügen
quelle
Rufen Sie den SOAP-Webservice in c # auf
quelle
new UpdatedOutlookServiceReferenceAPI.OutlookServiceSoapClient()
?