【问题标题】:How to handle SalesForce WSDL files for sandbox and production sites in ASP.Net?如何在 ASP.Net 中处理沙盒和生产站点的 SalesForce WSDL 文件?
【发布时间】:2009-09-13 18:39:05
【问题描述】:

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

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

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

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

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

感谢您的宝贵时间。

【问题讨论】:

    标签: wsdl asmx salesforce


    【解决方案1】:

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

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

    【讨论】:

    • 我正在考虑做同样的事情。看起来你必须这样做是一个非常愚蠢的 Web 服务实现。
    • 哇,我在 2010 年发布了这个 - 请告诉我 SFDC 已经改进了...... :)
    • 你将绑定声明为什么?
    • 大声笑,没有注意到年龄。不,SFDC 还是一样的。多个 WSDL,一个测试/开发和一个实时 :(
    【解决方案2】:

    可能是我遗漏了什么,但我会尽力回答:

    1 我假设您的意思是 URL?是的,您可以在创建客户端对象时进行

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

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

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

    【讨论】:

    • @olle: 1. 不,我指的是 WSDL 2. 我指的是“使用”子句。假设我有 2 个网络参考 a 和 b,如果我使用 a;并使用 b;在同一个文件中,我将无法编译它。有没有办法让它们中的一个驻留在不同的命名空间中,所以当我将它添加到文件时,它不会与另一个冲突? 3. 生产站点的 WSDL 中有许多不同的 API 版本、额外的自定义对象和额外的属性(无疑是由于我们的 SF 管理员的配置),这些在沙盒中是不存在的。感谢您的帮助!
    • 1. WSDL 是什么意思? WSDL 在您添加引用以生成代理类时使用,而不是在运行时使用。 2 它们确实驻留在不同的命名空间中,但是一旦您为两个命名空间添加 using 语句,它们就会发生冲突。我不明白添加命名空间会如何解决这个问题。不要使用 using 语句,而是使用完全限定的类型名称。喜欢 YourServiceA.User 而不是 User。
    • 我认为你需要重新考虑你想要做什么。服务(或您要使用的部分)在方法和参数方面是兼容的,并且只需添加一次引用并更改 URL 即可。或者它们不是,因为它们是不同的,所以没有办法为每个编写代码。
    • SalesForce.com 根据对站点所做的自定义生成 WSDL。如果沙盒站点的定制与生产站点不同,那么实际的 WSDL 将有所不同。例如,Contacts 类型将有不同的 XML 模式。甚至可以添加数据类型,在这种情况下会有新的模式和新的操作。
    【解决方案3】:

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

    【讨论】:

    • 你是对的 - 有人花了很多时间来配置产品站点,但从未费心更新沙盒 - 因此存在差异。
    猜你喜欢
    • 2012-04-30
    • 2021-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多