我需要对用户进行身份验证,并从ASP.Net应用程序获取有关它们的信息。 由于我有2个站点(沙箱,生产)和2个组织ID - 我需要生成2个SalesForce WSDL文件。

我把两个文件(每个大小约为600kb)区分开来,虽然它们的95%是相同的,但是到处都有足够的差异 - 足以让我需要同时使用它们。我添加了两个作为我的解决方案的Web引用,这是我的问题开始的地方。

显然,我不能在同一个文件中使用这两个引用,因为它们包含相同的类/函数。我不得不在周末写一个快速而肮脏的解决方案,所以我只创建了两个类 - 每个都使用不同的Web引用 - 但是确切的功能,我使用适当的一个,基于用户即将到来的URL从。这很好用,但让我感觉不好(读:快速和肮脏)解决方案。

我的问题:有没有办法做以下一项或多项:

  1. 动态更改网络参考?
  2. 在同一个文件中使用两个Web引用,但是将一个引用放在不同的命名空间中?
  3. 找到更好的解决方案?我找到了一个巨大的XmlSerializer.dll(3mb!) - 可能是由于使用了两个巨大的WSDL文件。
  4. 感谢您的时间。

有帮助吗?

解决方案

实际上,解决方案更容易,并且隐藏在我的鼻子底下 我只需要使用命名空间别名。这样,我可以在编译时包含这两种服务,并决定在运行时使用哪些服务:

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是非常可定制的,因此您的沙箱和生产站点不相同。如果您要利用沙箱网站进行测试的能力,那么两个需要是完全相同的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top