L'envoi de message SOAP avec C# Besoin d'Aide
Je voudrais envoyer un Message SOAP à un Service Web et de lire la réponse. Mon code est comme suit: je vous remercie de votre aide.
J'espère que ma question n'est pas répété, j'ai regardé autour pour trouver une solution mais je n'ai pas été couronnée de succès.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Services;
using System.Xml;
using System.Net;
using System.IO;
namespace TolunaPush
{
public partial class _Default : System.Web.UI.Page
{
private string sourceID = "50001255";
private string email = "[email protected]";
private string firstName = "Muz";
private string lastName = "Khan";
private string countryID = "2000077";
private string countryLanguage = "2000240";
private string postalCode = "N19 3NU";
private string dob = "1977-03-08";
private string gender = "2000247";
protected void Page_Load(object sender, EventArgs e)
{
sendSoapMessage();
}
protected void sendSoapMessage()
{
XmlDocument doc = new XmlDocument();
doc.InnerXml = @"<soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">
<soap:Body>
<SubmitPanelist xmlns=""http://www.greenfield.com/RegistrationGateway/Messages"">
<Registration xmlns=""http://www.greenfield.com/RegistrationGateway/Types"">
<Source>
<SourceID>" + sourceID + @"</SourceID>
</Source>
<Email>" + email + @"</Email>
<FirstName>" + firstName + @"</FirstName>
<LastName>" + lastName + @"</LastName>
<CountryUK>
<CountryID>" + countryID + @"</CountryID>
<Language>" + countryLanguage + @"</Language>
<Address>
<Postalcode>" + postalCode + @"</Postalcode>
</Address>
</CountryUK>
<DOB>" + dob + @"</DOB>
<Gender>" + gender + @"</Gender>
</Registration>
</SubmitPanelist>
</soap:Body>
</soap:Envelope>";
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://coreg.surveycenter.com/RegistrationGateway/PanelistService.asmx");
//if (proxy != null) req.Proxy = new WebProxy(proxy, true);
//req.Headers.Add("GetClientInfo", "http://tempuri.org/GetClientInfo");
req.ContentType = "text/xml;charset=\"utf-8\"";
req.Accept = "text/xml";
req.Method = "POST";
Stream stm = req.GetRequestStream();
doc.Save(stm);
stm.Close();
WebResponse resp = req.GetResponse();
stm = resp.GetResponseStream();
StreamReader r = new StreamReader(stm);
Response.Write(r.ReadToEnd());
//Response.Write(stm.ToString());
//Response.Write(r.ToString());
Response.End();
}
}
}
Mise à jour
Comme suggéré par Darin. J'ai fait comme indiqué, cependant, la ligne de code suivante
using (var client = new RegistrationBindingsClient("RegistrationBindings"))
donne l'erreur
The type or namespace name 'RegistrationBindingsClient' could not be found (are you missing a using directive or an assembly reference?)
Toute aide sera grandement appréciée
Vous n'avez pas spécifié quel est le problème. Êtes-vous une erreur? Quelle est l'erreur? Où faut-il se produire? Quelles sont les états des objets pertinents quand il arrive? Si il n'y a pas d'erreur, à partir de quel point le comportement du code s'écarter de comportement attendu?
Le service web de ne pas avoir un WSDL si donc, vous semblez être de réinventer la roue. La façon habituelle de consommer des services web soap est d'ajouter une référence web ou utilisé wsdl.exe. Cela permettra de créer des classes de proxy qui traitent tous de la savon de trucs pour vous vous venez d'appeler des méthodes sur les classes.
Le service web de ne pas avoir un WSDL si donc, vous semblez être de réinventer la roue. La façon habituelle de consommer des services web soap est d'ajouter une référence web ou utilisé wsdl.exe. Cela permettra de créer des classes de proxy qui traitent tous de la savon de trucs pour vous vous venez d'appeler des méthodes sur les classes.
OriginalL'auteur user1048006 | 2011-11-15
Vous devez vous connecter pour publier un commentaire.
Le service web que vous essayez de consommer offre un WSDL à la adresse suivante. Donc, faites simplement un clic droit sur les Références dans l'explorateur de solutions et utilisez la boîte de dialogue Ajouter une Référence de Service dans Visual Studio et le point le langage WSDL et il va générer des classes fortement typées pour que vous puissiez utiliser le service, comme cela:
Voir comment il est facile. Vous ne devriez pas vous soucier de tout SOAP et XML plomberie.
Et si vous êtes intéressé dans le sous-jacent enveloppe SOAP qui est envoyé sur le fil à l'aide de cette demande:
S'il vous plaît Aider, je voudrais le faire fonctionner plus vite
vous devez utiliser la boîte de dialogue Ajouter une Référence de Service, de ne pas Ajouter une Référence Web. Dans l'ordre pour qu'elle soit visible de votre projet doit être ciblage .NET 3.0 ou version ultérieure. Si vous utilisez une version plus ancienne, vous pouvez toujours invoquer le service web par l'ajout d'une Référence Web à l'WSDL. Dans les deux cas, des classes fortement typées sera généré et ajouté automatiquement à votre projet. Dans le deuxième cas, ils ne sera probablement pas nommés exactement comme dans ma réponse. Vous aurez à trouver leurs noms en explorant les métadonnées générées.
Grâce Darin, qui fonctionne parfaitement. Maintenant, je suis confronté à la tâche d'obtenir la réponse? Toutes les idées seront appréciées. Merci
OriginalL'auteur Darin Dimitrov
Est-il un message d'erreur ou avez-vous utilisé une HTTP moniteur?
Peut-être que certains Liens utiles:
OriginalL'auteur mbde
Vous pouvez accéder au service dans les 2 méthodes:
Par l'ajout d'une référence web du service. Dans visual studio, vous pouvez cliquer droit sur votre projet et sélectionnez l'option Ajouter une référence Web, puis de coller l'URL du service.
Générer client proxy à partir du wsdl wsdl à l'aide de l'outil de invite de commande Visual studio.La commande se présente comme suit:
c:>wsdl "http://coreg.surveycenter.com/RegistrationGateway/PanelistService.asmx?wsdl
Qu'elle peut susciter .cs fichier et une sortie.config. Inclure l' .cs de fichier dans votre projet et vous pouvez directement l'utiliser pour accéder au service. Assurez-vous que le fichier de configuration d'entrées sont ajoutées à vos projets config.
Si vous souhaitez utiliser HttpWebRequest puis trouver le code ci-dessous :
Mon Service ressemble :
OriginalL'auteur Rajesh
Voici un objectif général de classe que vous pouvez utiliser pour obtenir ce dont vous avez besoin.
AVERTISSEMENT IMPORTANT: Vous ne devez utiliser ce mode lorsque vous voulez (ou besoin) manuellement le numéro d'un service web SOAP: dans la plupart des scénarios, vous devriez certainement utiliser le Web Service WSDL avec le Ajouter une Référence de Service fonctionnalité de Visual Studio, qui est la façon appropriée de le faire.
Pour plus d'info & les détails concernant cette classe, vous pouvez également lire ce post sur mon blog.
OriginalL'auteur Darkseal