J'essaie de me connecter à l'API groupée SalesForce.com pour pouvoir effectuer des téléchargements groupés de données à partir de mon application. J'ai lu le PDF documentation qui insiste sur l'utilisation de CURL pour faire les requêtes POST. Conformément aux instructions, j'ai créé un fichier texte au format XML qui est utilisé pour se connecter au serveur.Connexion à l'API groupée SalesForce à l'aide de C#
contenu login.txt ci-dessous:
<?xml version="1.0" encoding="utf-8" ?>
<env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Body>
<n1:login xmlns:n1="urn:partner.soap.sforce.com">
<n1:username>my username</n1:username>
<n1:password>my password</n1:password>
</n1:login>
</env:Body>
</env:Envelope>
Voici ce que je suis en train de faire dans mon code pour faire la demande de connexion:
XmlDocument XMLResponse = null;
HttpWebRequest httpRequest;
HttpWebResponse httpResponse = null;
Stream requestStream = null;
Stream responseStream = null;
XmlTextReader xmlReader;
httpRequest = HttpWebRequest)WebRequest.Create("https://login.salesforce.com/services/Soap/c/20.0");
try
{
byte[] bytes = File.ReadAllBytes(filename);
httpRequest.Method = "POST";
httpRequest.ContentLength = bytes.Length;
httpRequest.ContentType = "text/xml; charset=UTF-8";
httpRequest.Headers.Add("SOAPAction: login");
requestStream = httpRequest.GetRequestStream();
requestStream.Write(bytes, 0, bytes.Length);
requestStream.Close();
httpResponse = (HttpWebResponse)httpRequest.GetResponse();
if (httpResponse.StatusCode == HttpStatusCode.OK)
{
responseStream = httpResponse.GetResponseStream();
xmlReader = new XmlTextReader(responseStream);
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(xmlReader);
XMLResponse = xmldoc;
xmlReader.Close();
}
httpResponse.Close();
}
Lorsque ce code est exécuté, je reçois toujours un 500 erreur. Est-ce que quelqu'un a une expérience de faire ce que je tente de faire? Pourriez-vous s'il vous plaît me fournir quelques suggestions?
Merci d'avance.
Comment puis-je lire la réponse? Dès que .GetResponse() est appelé, il m'envoie à mon bloc catch avec l'exception générique 500, qui n'a pas d'InnerException. – Adam
WebException inclut une propriété Response que vous pouvez utiliser pour accéder à la réponse dans le cas d'exception. – superfell
Merci pour la suggestion! Maintenant, quand j'examine la réponse, j'obtiens le message d'erreur suivant: "La requête SOAP doit utiliser SOAP 1.1, n'a pas reçu une enveloppe SOAP 1.1 comme racine du document". Je n'ai pas vraiment d'expérience dans l'utilisation de SOAP, alors est-ce que vous pourriez voir quelque chose dans le code que j'ai posté ci-dessus qui expliquerait ce problème? – Adam