2012-02-29 2 views

ответ

6

Набор инструментов .NET был announced от salesforce.

«Инструмент Force.com для .NET предоставляет простой способ для разработчиков .NET взаимодействовать с Force.ком REST API используя родные библиотеки.»

https://github.com/developerforce/Force.com-Toolkit-for-NET/

2

ну, не то, что я знаю. Ничего особенного, хотя, в зависимости от того, хотите ли вы использовать его на стороне клиента или на стороне сервера, вы используете подход javascript (как описано в restapi) или просто System.Net.WebRequest для серверной части.

Проверить Dan's .NET blog

+0

Спасибо за ответ. Я буду использовать его на стороне сервера для интеграции в другие системы. Я очень надеялся на то, что бы разбора WebResponse на классы, представляющие ресурсы SF возвращены и имеют четкую обработку ошибок - утомительный материал :) –

+0

, если вы хотите сильную типизацию, вы должны пойти по пути WSDL и использовать веб-службы. REST сам по себе является архитектурной идеей, а не установленным протоколом, который может привести к универсальному генерации кода, он даже не требует использования JSON, который использует sf restApi, и он не содержит стандартизованных метаданных, которые вы могли бы анализировать и создавать классы. В теории вы можете использовать/sobjects/'object_name'/describe для извлечения метаданных как можно скорее rt процессов разработки, затем создайте для него классы и используйте 'JavaScriptSerializer.Deserialize '. В любом случае, это звучит и на самом деле боль :) – mmix

3

Я действительно надеялся на то, что бы разбор WebResponse на классы, представляющих ресурсы SF вернулся, и имеет солидную обработку ошибок - утомительные вещи :)

Это существует - это называется SOAP API :) Серьезно, хотя, если вы делаете серверную интеграцию и хотите вводить сгенерированные классы и сплошную обработку ошибок, SOAP - это ваш пони.

3

Я использую RestSharp для упрощения вызовов и де-сериализации объектов, но вам все равно придется обрабатывать все коды ошибок Salesforce. Он также имеет встроенную функциональность OAuth, но версия, которую я использую (около 2 месяцев), не очень хорошо поддерживает OAuth 2. Это все еще боль, но стоит того, если вы тянете много данных.

+0

Интересно, я взгляну на RestSharp. Я просматривал образцы api.net asp.net, где они расширяются для доступа к твиттеру через OAuth2: http://code.msdn.microsoft.com/Extending-HttpClient-with-8739f267 –

+0

Спасибо за ссылку, я обязательно проверю это вне. Является ли этот образец для OAuth2? Я не смотрел на него внимательно, но я заметил префикс oauth_, который не реализован в службе Salesforce OAuth2. – Sprockincat

0

Вот пример кода с использованием рабочего процесса паролей. Он получает маркер доступа и запрашивает API:

public static string Login() 
{ 
    string responseJsonString = string.Empty; 
    StringBuilder str = new StringBuilder(); 
    str.AppendFormat("{0}?grant_type=password&client_id={1}&client_secret={2}&username={3}&password={4}" 
        , LoginOAuthUrl, ClientID, ClientSecret, ClientUserName, ClientPassword); 
    // Request token 
    try 
    { 
     HttpWebRequest request = WebRequest.Create(str.ToString()) as HttpWebRequest; 

     if (request != null) 
     { 
      request.Method = "POST"; 
      using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) 
      { 
       if (response.StatusCode == HttpStatusCode.OK) 
       { 
        // Get the "access_token" and "instance_url" from the response. 
        // Convert the JSON response into a token object 


        // Here we get the response as a stream. 
        using (StreamReader responseStream = new StreamReader(response.GetResponseStream())) 
        { 
         responseJsonString = responseStream.ReadToEnd(); 
         // Deserialize JSON response into an Object. 
         JsonValue value = JsonValue.Parse(responseJsonString); 
         JsonObject responseObject = value as JsonObject; 
         AccessToken = (string)responseObject["access_token"]; 
         InstanceUrl = (string)responseObject["instance_url"]; 
         return "We have an access token: " + AccessToken + "\n" + "Using instance " + InstanceUrl + "\n\n"; 
        } 
       } 
      } 
     } 
     return responseJsonString; 
    } 
    catch (Exception ex) 
    { 
     throw new Exception(string.Format("Unable to login to salesforce: {0}", str), ex); 
    } 
} 

public static string Query() 
{    
    string RequestUrl = InstanceUrl + "/services/data/v28.0/query"; 
    string queryParam = "q=" + QUERY; 
    // Read the REST resources 
    string responseJsonString = HttpGet(RequestUrl, queryParam); 
    return responseJsonString; 
} 

public static string HttpGet(string URI, string Parameters) 
{ 
    // Add parameters to the URI 
    string requestUri = URI + "?" + Parameters; 
    System.Net.WebRequest req = System.Net.WebRequest.Create(requestUri); 
    req.Method = "GET"; 
    req.Headers.Add("Authorization: OAuth " + AccessToken); 

    // Do the GET request 
    System.Net.WebResponse resp = req.GetResponse(); 
    if (resp == null) return null; 
    System.IO.StreamReader sr = new System.IO.StreamReader(resp.GetResponseStream()); 
    return sr.ReadToEnd().Trim(); 
} 
7

Если вы ищете для клиентской библиотеки REST API Salesforce, взять взгляд на SalesforceSharp.

Он поддерживает создание, обновление, удаление и запрос записей из REST API.

Создать

client.Create("Account", 
    new { Name = "name created", Description = "description created" })); 

Update

client.Update("Account", "<record id>", 
    new { Description = "description updated" })); 

Удалить

client.Delete("Account", "<ID">); 

Запрос

var records = client.Query<Account>("SELECT id, name, description FROM Account"); 

В настоящее время он поддерживает имя пользователя и пароля, процесс аутентификации, а другие потоки (веб-сервер и агент пользователя) может быть создан и введен.

Смежные вопросы