如何在ASP.Net中处理沙箱和生产站点的SalesForce WSDL文件?
-
07-07-2019 - |
题
我需要对用户进行身份验证,并从ASP.Net应用程序获取有关它们的信息。 由于我有2个站点(沙箱,生产)和2个组织ID - 我需要生成2个SalesForce WSDL文件。
我把两个文件(每个大小约为600kb)区分开来,虽然它们的95%是相同的,但是到处都有足够的差异 - 足以让我需要同时使用它们。我添加了两个作为我的解决方案的Web引用,这是我的问题开始的地方。
显然,我不能在同一个文件中使用这两个引用,因为它们包含相同的类/函数。我不得不在周末写一个快速而肮脏的解决方案,所以我只创建了两个类 - 每个都使用不同的Web引用 - 但是确切的功能,我使用适当的一个,基于用户即将到来的URL从。这很好用,但让我感觉不好(读:快速和肮脏)解决方案。
我的问题:有没有办法做以下一项或多项:
- 动态更改网络参考?
- 在同一个文件中使用两个Web引用,但是将一个引用放在不同的命名空间中?
- 找到更好的解决方案?我找到了一个巨大的XmlSerializer.dll(3mb!) - 可能是由于使用了两个巨大的WSDL文件。 醇>
感谢您的时间。
解决方案
实际上,解决方案更容易,并且隐藏在我的鼻子底下 我只需要使用命名空间别名。这样,我可以在编译时包含这两种服务,并决定在运行时使用哪些服务:
using System.Web;
.
using ProductionAPI = MyCompany.SForce;
using SandboxAPI = MyCompany.SForce.Sandbox;
.
.
.
if(isSandbox)
binding = new SandboxAPI.SForceService();
else
binding = new ProductionAPI.SForceService();
.
.
.
其他提示
可能是我遗漏了一些东西,但我会尽力回答:
1我认为你的意思是URL?是的,您可以在创建客户端对象时使用
var service = new Acmeco.AcmecoService();
service.Url = "oneUrlOrTheOther;
2你是什么意思?添加引用时,必须为其指定一个名称,将其放在唯一的名称空间中。就像上一个例子中的Acmeco一样。
3那种取决于你提到的5%差异是什么?我不太明白你是如何在两个不同主机上的同一个webservice的WSDL中找到差异的。我认为只有地址会有所不同,但方法和参数会保持不变。也许你可以精心制作?
它们之间有什么区别?我怀疑它只是SalesForce.com是非常可定制的,因此您的沙箱和生产站点不相同。如果您要利用沙箱网站进行测试的能力,那么两个需要是完全相同的。
不隶属于 StackOverflow