2013-07-26 6 views
0

Я после этого урока http://wiki.developerforce.com/page/Integrating_Force.com_with_Microsoft_.NETне удается подключиться к SalesForce в C#

Однако, я получаю эту ошибку:

LOGIN_MUST_USE_SECURITY_TOKEN: Invalid username, password, security token; or user locked out. Are you at a new location? When accessing Salesforce--either via a desktop client or the API--from outside of your company’s trusted networks, you must add a security token to your password to log in. To receive a new security token, log in to salesforce.com at http://login.salesforce.com and click Setup | My Personal Information | Reset Security Token.

Это мой код в моем консольном приложении:

static void Main(string[] args) 
     { 
      string userName; 
      string password; 
      userName = "[email protected]"; 
      password = "myPassword"; 

      SforceService SfdcBinding = null; 
      LoginResult CurrentLoginResult = null; 
      SfdcBinding = new SforceService(); 
      try 
      { 
       CurrentLoginResult = SfdcBinding.login(userName, password); 
      } 
      catch (System.Web.Services.Protocols.SoapException e) 
      { 
       // This is likley to be caused by bad username or password 
       SfdcBinding = null; 
       throw (e); 
      } 
      catch (Exception e) 
      { 
       // This is something else, probably comminication 
       SfdcBinding = null; 
       throw (e); 
      } 

     } 

Ошибка указывает, что мне нужен токен безопасности, но документация никогда не упоминает об этом, и я не уверен, как ее получить.

+1

Извините, что беспокою вас. Я следую тому же учебнику. Я добавил файл wsdl xml в соответствии с инструкциями и добавил ссылку на службу. Тогда в моем коде у меня точно так же, как у вас есть выше, но добавлено с использованием BST.SFDC; Но на строке SforceService SfdcBinding = null; Я получаю сообщение об ошибке «Тип или имя пространства имен« SforceService »не удалось найти (вам не хватает директивы using или ссылки на сборку?)« –

+0

@TrevorDaniel Я считаю, что вам нужно добавить 'using [WhateverNouYouGaveYourWSDLFile]; , Я могу дважды проверить вас, когда я получу в офисе завтра; но я абсолютно уверен. Дайте мне знать, если это сработает для вас. – user1477388

+0

Им интересно, если я использовал неверный файл wsdl - im, используя корпоративный? какой из них вы использовали? –

ответ

6

То, что я должен был сделать (чего не было в документации) находится по адресу:

https://na15.salesforce.com/_ui/system/security/ResetApiTokenConfirm?retURL=%2Fui%2Fsetup%2FSetup%3Fsetupid%3DPersonalInfo&setupid=ResetApiToken

И, сбросьте свой токен. Затем добавьте его до конца моего пароля:

If your password = "mypassword"

And your security token = "XXXXXXXXXX"

You must enter "mypasswordXXXXXXXXXX" in place of your password

Ref. http://docs.servicerocket.com/pages/viewpage.action?pageId=83099770

2

С помощью API SOAP, как это, вы должны сначала пройти аутентификацию службы, указав имя пользователя и пароль. Их ответ должен вернуть токен авторизации, который будет действителен в течение определенного периода времени. Затем в ваших последующих сообщениях вы передаете этот токен API, чтобы он знал, кто вы.

Получить токен авторизации:

SforceService SfdcBinding = null; 
LoginResult CurrentLoginResult = null; 
SfdcBinding = new SforceService(); 
try 
{ 
    CurrentLoginResult = SfdcBinding.login(userName, password); 
} 
catch (System.Web.Services.Protocols.SoapException e) 
{ 
    // This is likely to be caused by bad username or password 
    SfdcBinding = null; 
    throw (e); 
} 
catch (Exception e) 
{ 
    // This is something else, probably communication 
    SfdcBinding = null; 
    throw (e); 
} 

Настройка сеанса:

//Change the binding to the new endpoint 
SfdcBinding.Url = CurrentLoginResult.serverUrl; 

//Create a new session header object and set the session id to that returned by the login 
SfdcBinding.SessionHeaderValue = new SessionHeader(); 
SfdcBinding.SessionHeaderValue.sessionId = CurrentLoginResult.sessionId; 

Выполните запрос:

QueryResult queryResult = null; 
String SOQL = "select FirstName, LastName, Phone from Lead where email = '[email protected]'"; 
queryResult = SfdcBinding.query(SOQL); 
+0

Спасибо, что увеличил мое понимание, но как это отличается от того, что я уже делаю? Проблема в том, что я получаю ошибку 'LOGIN_MUST_USE_SECURITY_TOKEN' – user1477388

+1

Вы уверены, что имя пользователя/пароль верны? Имеет ли SalesForce.com какие-либо инструменты API, которые позволят вам проверить правильность имени пользователя/пароля? – JeremiahDotNet

+0

Спасибо за помощь. Я исправил это, наконец, сбросив токен безопасности и добавив токен после моего пароля. Это не в документации, которую я читал; но, к счастью, я понял это. – user1477388