Como lidar com arquivos SalesForce WSDL para sites sandbox e de produção em ASP.Net?
-
07-07-2019 - |
Pergunta
Eu preciso autenticar os usuários e obter informações sobre eles a partir de uma aplicação ASP.Net. Desde que eu tenho 2 sites (sandbox, produção) e 2 org IDs -. I necessário para gerar 2 arquivos SalesForce WSDL
I diffed os 2 arquivos (cada um cerca de 600kb de tamanho) e enquanto eles são 95% da mesma, existem diferenças suficientes espalhados por todo o lugar - o suficiente para eu necessidade de usar os dois. Eu adicionei tanto como referências da Internet para a minha solução, e é aqui que meu problema começa.
Obviamente, eu não posso usar ambas as referências no mesmo arquivo, pois eles contêm as mesmas classes / funções. Eu tive que escrever uma solução rápida e suja no fim de semana, então eu acabamos de criar 2 classes - cada um usando uma referência da web diferente - mas por outro lado a funcionalidade exata, e eu uso o mais adequado, com base na URL que o usuário está chegando de. Isso funciona bem, mas me parece uma má (leia-se: e suja rápido). Solução
A minha pergunta: existe alguma maneira de fazer um ou mais dos seguintes:
- mudar a referência da web em tempo real?
- usar ambas as referências da web no mesmo arquivo, mas colocar um em um namespace diferente?
- encontrar uma melhor solução para toda a situação? I nd com um XmlSerializer.dll enorme (3MB!) - provavelmente devido ao uso de ambos os arquivos WSDL enormes .
Obrigado pelo seu tempo.
Solução
Na verdade, a solução foi muito mais fácil e estava escondido debaixo do meu nariz.
Eu só precisava usar Namespace aliases . Dessa forma, posso incluir ambos os serviços em tempo de compilação, e decidir qual usar em tempo de execução:
using System.Web;
.
using ProductionAPI = MyCompany.SForce;
using SandboxAPI = MyCompany.SForce.Sandbox;
.
.
.
if(isSandbox)
binding = new SandboxAPI.SForceService();
else
binding = new ProductionAPI.SForceService();
.
.
.
Outras dicas
Pode ser que eu estou faltando alguma coisa, mas vou tentar responder:
1 Presumo que significa que o URL? Sim, você pode ao criar o objeto de cliente
var service = new Acmeco.AcmecoService();
service.Url = "oneUrlOrTheOther;
2 O que você quer dizer? Quando você adiciona a referência que você tem que dar-lhe um nome que coloca-lo em um espaço único. Como AcmeCo no exemplo anterior.
3 Esse tipo de depende do que em que a diferença de 5% que você menciona? Eu não entendo muito bem como você acabar com a diferença no WSDL para o mesmo webservice em dois hospedeiros diferentes. Eu acho que apenas os endereços seria diferente, mas os métodos e parâmetros permaneceria a mesma. Talvez você possa ellaborate?
Quais são as diferenças entre eles? Eu suspeito que é apenas aht SalesForce.com é muito personalizável, para que seus sites sandbox e de produção não são idênticos. Os dois necessidade para ser idênticos se você estiver indo para aproveitar a capacidade de usar o site sandbox para testar.