Come gestire i file WSDL di SalesForce per sandbox e siti di produzione in ASP.Net?

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

  •  07-07-2019
  •  | 
  •  

Domanda

Devo autenticare gli utenti e ottenere informazioni su di loro da un'applicazione ASP.Net. Dato che ho 2 siti (sandbox, produzione) e 2 ID organizzazione, dovevo generare 2 file WSDL SalesForce.

Ho diffuso i 2 file (ciascuno di circa 600 KB di dimensioni) e sebbene siano uguali al 95%, ci sono abbastanza differenze sparse dappertutto - abbastanza per me che ho bisogno di usarle entrambe. Ho aggiunto entrambi come riferimenti web alla mia soluzione, ed ecco dove inizia il mio problema.

Ovviamente, non posso usare entrambi i riferimenti nello stesso file, poiché contengono le stesse classi / funzioni. Ho dovuto scrivere una soluzione rapida e sporca durante il fine settimana, quindi ho appena creato 2 classi - ognuna utilizzando un riferimento web diverso - ma per il resto l'esatta funzionalità e utilizzo quella appropriata, in base all'URL che sta arrivando l'utente a partire dal. Funziona bene, ma mi sembra una soluzione negativa (leggi: veloce e sporco).

La mia domanda: esiste un modo per eseguire una o più delle seguenti operazioni:

  1. cambiare il riferimento web al volo?
  2. utilizzare entrambi i riferimenti Web nello stesso file, ma inserirne uno in uno spazio dei nomi diverso?
  3. trovare una soluzione migliore all'intera situazione? Ho trovato un enorme XmlSerializer.dll (3mb!) - probabilmente a causa dell'utilizzo di entrambi i file WSDL enormi.

Grazie per il tuo tempo.

È stato utile?

Soluzione

In realtà, la soluzione era molto più semplice e si nascondeva sotto il mio naso.
Avevo solo bisogno di usare Alias ??dello spazio dei nomi . In questo modo, posso includere entrambi i servizi in fase di compilazione e decidere quale utilizzare in fase di esecuzione:

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

Altri suggerimenti

Potrebbe essere che mi manchi qualcosa, ma proverò a rispondere:

1 Suppongo che intendi l'URL? Sì, è possibile quando si crea l'oggetto client

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

2 Cosa intendi? Quando aggiungi il riferimento devi assegnargli un nome che lo inserisca in uno spazio dei nomi univoco. Come Acmeco nell'esempio precedente.

3 Questo tipo di dipende da cosa in quella differenza del 5% che menzioni? Non capisco bene come si finisce con una differenza nel WSDL per lo stesso servizio web su due host diversi. Penserei che solo gli indirizzi sarebbero diversi ma i metodi e i parametri rimarrebbero gli stessi. Forse puoi ellaborare?

Quali sono le differenze tra loro? Sospetto che SalesForce.com sia solo molto personalizzabile, quindi il tuo sandbox e i siti di produzione non sono identici. I due devono essere identici per sfruttare la capacità di utilizzare il sito sandbox per i test.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top