2012-02-29 23 views

Respuesta

2

bueno, no que yo sepa. Sin embargo, no hay mucho, dependiendo de si desea usarlo desde el lado del cliente o del lado del servidor, utiliza el enfoque javascript (como se documenta en restapi) o simplemente System.Net.WebRequest para el lado del servidor.

Comprobar Dan's .NET blog

+0

Gracias por la respuesta. Voy a utilizar el servidor de integrar en otros sistemas. Yo estaba realmente esperando por algo que analizar el WebResponse en clases que representan los recursos de SF devueltos, y tienen un manejo de errores sólido - las cosas tediosas :) –

+0

si desea un tipado fuerte, debe usar WSDL y usar servicios web. REST por sí mismo es una idea arquitectónica en lugar de un protocolo establecido que podría conducir a universal generación de código, ni siquiera ordena el uso de JSON que utiliza sf restApi y no incluye ningún metadato estandarizado que pueda analizar y crear clases. En teoría, puede usar/sobjects/'object_name'/describe para recuperar los metadatos como ap rt del proceso de desarrollo, luego cree clases para él y use 'JavaScriptSerializer.Deserialize '. HOwever, suena y realmente es un dolor :) – mmix

3

Yo estaba realmente esperando por algo que analizar el WebResponse en clases que representan los recursos SF regresado, y tienen un manejo sólido de error - la materia tediosa :)

Esto existe, se llama SOAP API :) En serio, si está haciendo integración en el servidor y quiere clases generadas y sólida gestión de errores, SOAP es su pony.

3

Uso RestSharp para simplificar las llamadas y deserializar los objetos, pero aún tiene que manejar todos los códigos de error de Salesforce. También tiene incorporada cierta funcionalidad de OAuth, pero la versión que estoy usando (de aproximadamente 2 meses) no es compatible con OAuth 2 muy bien. Todavía es un dolor, pero vale la pena si está obteniendo una gran cantidad de datos.

+0

Interesante, voy a echar un vistazo a RestSharp. Estaba viendo las muestras de asp.net web api donde se extienden para acceder a Twitter a través de OAuth2: http://code.msdn.microsoft.com/Extending-HttpClient-with-8739f267 –

+0

Gracias por el enlace, definitivamente voy a consultar que fuera. ¿Es esa muestra para OAuth2 sin embargo? No lo he examinado de cerca, pero he notado el prefijo oauth_, que no está implementado en el servicio Salesforce OAuth2. – Sprockincat

0

Aquí está el código de muestra que utiliza el flujo de trabajo de contraseña. Se pone el token de acceso y consulta la 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

Si usted está buscando biblioteca cliente REST API de una Salesforce, echar un vistazo en SalesforceSharp.

Admite la creación, actualización, eliminación y consulta de registros de la API REST.

Crear

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

actualización

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

Eliminar

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

Consulta de

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

Hoy en día se apoya flujo de autenticación nombre de usuario-contraseña, pero otros flujos (servidor web y de agente de usuario) pueden ser creados y se inyectan.