Envelopper XML dans l'enveloppe SOAP .net

J'ai besoin d'aide avec l'enchaînement d'un fichier XML dans une enveloppe SOAP pour un tiers d'un serveur SOAP. La troisième partie a fourni les fichiers xsd pour la requête entrante et sortante de la réponse. J'ai pris les fichiers XSD et créé des classes C# à l'aide de l'outil xsd. Mon problème est que j'ai besoin d'envelopper le sérialisé demande avec une enveloppe SOAP et je ne sais pas par où commencer. Je regardais le site de Microsoft, des Améliorations de Service 3, mais qui dit que c'est seulement pour .net 2.0 et VS2005. Je suis avec VS2012 et .net 4.5. Aussi, j'ai regardé dans la connexion au serveur par le biais du service web, mais il ne semble pas compatible et ne dispose pas d'un WSDL.

Ce qui suit est un échantillon de ce que le serveur SOAP en attend une requête entrante.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<soap:Body>
<GetBasicData xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="CRS610MI">
<CONO xmlns="">1</CONO>
<CUNO xmlns="">12345</CUNO>
</GetBasicData>
</soap:Body>
</soap:Envelope>

C'est ce que le XML sérialisé chaîne ressemble.

<?xml version="1.0" encoding="utf-8"?>
<GetBasicData xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="CRS610MI">
<CONO xmlns="">1</CONO>
<CUNO xmlns="">12345</CUNO>
</GetBasicData>

Code que j'utilise pour mon site web de demande et de réponse.

Byte[] byteArray = System.Text.UTF8Encoding.UTF8.GetBytes(data);

WebRequest webRequest = WebRequest.Create(@"http://myserver:8888");
webRequest.ContentLength = byteArray.Length;
webRequest.ContentType = @"text/xml; charset=utf-8";
webRequest.Headers.Add("SOAPAction", @"http://schemas.xmlsoap.org/soap/envelope/");
webRequest.Method = "POST";

Stream requestStream = webRequest.GetRequestStream();
requestStream.Write(byteArray, 0, byteArray.Length);
requestStream.Close();
requestStream.Dispose();

WebResponse webResponse = webRequest.GetResponse();

Stream responseStream = webResponse.GetResponseStream();

StreamReader streamReader = new StreamReader(responseStream);

String line;

while ((line = streamReader.ReadLine()) != null)
{
    Debug.WriteLine(line);
}

J'ai testé mon code en remplaçant ma chaîne sérialisée avec le texte dans le fichier d'exemple fourni par le tiers et il a fonctionné comme prévu. J'ai aussi pris ma chaîne sérialisée et inséré le texte enveloppe dans les endroits corrects et qui a également travaillé, demande web a passé et j'ai obtenu la réponse que je cherchais. À court d'insérer l'enveloppe du texte dans ma chaîne sérialisée manuellement ce que je peux faire. Je imagine qu'il y a une méthode ou d'une classe qui se charge de cela pour moi, d'une manière standardisée?

Le "normalisé" est pour le service à fournir un document WSDL.
BTW, êtes-vous bien il n'y a pas de WSDL pour le service? Essayez d'utiliser un navigateur, et la navigation à l'adresse du service. Si cela ne fonctionne pas, essayez d'ajouter ?wsdl à la fin de l'URL du service.

OriginalL'auteur Matthew | 2014-02-26