¿Cómo manejar archivos WSDL de SalesForce para sandbox y sitios de producción en ASP.Net?

StackOverflow https://stackoverflow.com/questions/1418508

  •  07-07-2019
  •  | 
  •  

Pregunta

Necesito autenticar usuarios y obtener información sobre ellos desde una aplicación ASP.Net. Como tengo 2 sitios (sandbox, producción) y 2 ID de organización, necesitaba generar 2 archivos WSDL de SalesForce.

Difundí los 2 archivos (cada uno de unos 600 kb de tamaño) y aunque son 95% iguales, hay suficientes diferencias esparcidas por todo el lugar, lo suficiente como para que necesite usarlos a ambos. Agregué ambas como referencias web a mi solución, y aquí es donde comienza mi problema.

Obviamente, no puedo usar ambas referencias en el mismo archivo, ya que contienen las mismas clases / funciones. Tuve que escribir una solución rápida y sucia durante el fin de semana, por lo que acabo de crear 2 clases, cada una con una referencia web diferente, pero de lo contrario, la funcionalidad exacta, y uso la adecuada, en función de la URL que viene el usuario desde. Esto funciona bien, pero me parece una mala solución (léase: rápida y sucia).

Mi pregunta: ¿hay alguna forma de hacer uno o más de los siguientes:

  1. cambiar la referencia web sobre la marcha?
  2. usa ambas referencias web en el mismo archivo, pero ¿coloca una en un espacio de nombre diferente?
  3. ¿encuentra una mejor solución para toda la situación? Me encontré con un enorme XmlSerializer.dll (3mb!), Probablemente debido al uso de ambos enormes archivos WSDL.

Gracias por su tiempo.

¿Fue útil?

Solución

En realidad, la solución era mucho más fácil y se escondía debajo de mi nariz.
Solo necesitaba usar Alias ??de espacio de nombres . De esa manera, puedo incluir ambos servicios en tiempo de compilación y decidir cuál usar en tiempo de ejecución:

using System.Web;
.
using ProductionAPI = MyCompany.SForce;
using SandboxAPI = MyCompany.SForce.Sandbox;
.
.
.
if(isSandbox)
  binding = new SandboxAPI.SForceService();
else
  binding = new ProductionAPI.SForceService();
.
.
.

Otros consejos

Puede ser que me falte algo, pero intentaré responder:

1 ¿Asumo que te refieres a la URL? Sí, puede crear el objeto de cliente

var service = new Acmeco.AcmecoService();
service.Url = "oneUrlOrTheOther;   

2 ¿Qué quieres decir? Cuando agrega la referencia, debe darle un nombre que la coloque en un espacio de nombres único. Como Acmeco en el ejemplo anterior.

3 ¿Eso depende de qué en esa diferencia del 5% mencionas? No entiendo cómo terminas con una diferencia en el WSDL para el mismo servicio web en dos hosts diferentes. Creo que solo las direcciones serían diferentes, pero los métodos y parámetros seguirían siendo los mismos. ¿Quizás puedas colaborar?

¿Cuáles son las diferencias entre ellos? Sospecho que es solo que SalesForce.com es muy personalizable, por lo que su sandbox y los sitios de producción no son idénticos. Los dos necesitan ser idénticos si vas a aprovechar la capacidad de usar el sitio de sandbox para las pruebas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top