2

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

我对这 2 个文件(每个文件大小约为 600kb)进行了比较,虽然它们 95% 相同,但到处都有足够的差异 - 足以让我需要同时使用它们。我将两者都添加为我的解决方案的网络引用,这就是我的问题开始的地方。

显然,我不能在同一个文件中使用这两个引用,因为它们包含相同的类/函数。我不得不在周末编写一个快速而肮脏的解决方案,所以我只创建了 2 个类 - 每个类都使用不同的 Web 参考 - 但除此之外,我使用了正确的功能,我根据用户即将到来的 URL 使用适当的从。这很好用,但让我觉得这是一个糟糕的(阅读:快速而肮脏的)解决方案。

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

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

谢谢你的时间。

4

3 回答 3

2

实际上,解决方案要容易得多,而且藏在我的眼皮底下。
我只需要使用命名空间别名。这样,我可以在编译时包含这两个服务,并决定在运行时使用哪个:

using System.Web;
.
using ProductionAPI = MyCompany.SForce;
using SandboxAPI = MyCompany.SForce.Sandbox;
.
.
.
if(isSandbox)
  binding = new SandboxAPI.SForceService();
else
  binding = new ProductionAPI.SForceService();
.
.
.
于 2009-09-17T19:10:27.697 回答
0

可能是我遗漏了一些东西,但我会尝试回答:

1 我假设你的意思是网址?是的,您可以在创建客户端对象时

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

2 你什么意思?当您添加引用时,您必须为其命名,将其置于唯一的命名空间中。就像前面示例中的 Acmeco 一样。

3 这取决于你提到的那 5% 的差异是什么?我不太明白您如何最终在两个不同主机上的相同 Web 服务的 WSDL 中有所不同。我认为只有地址会不同,但方法和参数会保持不变。也许您可以详细说明?

于 2009-09-13T18:53:35.003 回答
0

它们之间有什么区别?我怀疑这只是因为 SalesForce.com 是非常可定制的,因此您的沙盒和生产站点并不相同。如果您要利用使用沙盒站点进行测试的能力,这两者必须相同。

于 2009-09-14T02:43:58.303 回答