Подключение к оптовому API SalesForce с использованием C # - PullRequest
4 голосов
/ 01 декабря 2010

Я пытаюсь подключиться к массовому API SalesForce.com, чтобы я мог выполнять массовую загрузку данных из своего приложения. Я прочитал PDF документацию , в которой подчеркивается использование CURL для выполнения запросов POST В соответствии с инструкциями я создал текстовый файл в формате XML, который используется для входа на сервер.

Содержимое Login.txt ниже:

<?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>

Вот что я пытаюсь сделать в своем коде, чтобы сделать запрос на вход:

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();
}

Когда этот код выполняется, я всегда получаю ошибку 500. У кого-нибудь есть опыт в том, что я пытаюсь сделать? Не могли бы вы дать мне несколько предложений?

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 15 марта 2011

Создание файла XML для входа в систему Salesforce

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <soap:Body>
    <login xmlns="urn:enterprise.soap.sforce.com">
      <username>username</username>
      <password>password + token</password>
    </login>
  </soap:Body>
</soap:Envelope>

используйте следующий код c # для входа в систему salesforce

XmlDocument doc = new XmlDocument();
                doc.LoadXml(str);
                string uri = "https://login.salesforce.com/services/Soap/c/21.0";
                HttpWebRequest req = (HttpWebRequest)WebRequest.Create(uri);
                req.Headers.Add("SOAPAction", "login");
                req.ContentType = "text/xml;charset=\"utf-8\"";
                req.Accept = "text/xml";
                req.Method = "POST";
                stm = req.GetRequestStream();
                doc.Save(stm);
                stm.Close();
                WebResponse resp = req.GetResponse();
                stm = resp.GetResponseStream();
                XmlDocument doc1 = new XmlDocument();
                doc1.Load(stm);
3 голосов
/ 01 декабря 2010

Для входа в систему просто загрузите и импортируйте партнерский WSDL и используйте сгенерированный клиент веб-службы. В противном случае вы захотите обновить свой код, чтобы прочитать ответ, когда он получит код состояния 500 (спецификация SOAP требует сообщений об ошибках для использования кода состояния 500), а тело ответа даст вам больше подсказок по проблеме. В этом случае я ожидаю, что вы получите ошибку подтверждения личности, и вам потребуется предоставить свой токен безопасности API в дополнение к паролю в запросе на вход в систему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...