代码之家  ›  专栏  ›  技术社区  ›  Traveling Tech Guy

如何在ASP.NET中处理用于沙盒和生产站点的Salesforce WSDL文件?

  •  2
  • Traveling Tech Guy  · 技术社区  · 17 年前

    我需要对用户进行身份验证,并从ASP.NET应用程序获取有关这些用户的信息。 因为我有2个站点(沙盒、产品)和2个组织ID,所以我需要生成2个Salesforce WSDL文件。

    我对这两个文件进行了区分(每个文件的大小约为600kb),虽然它们95%相同,但在整个地方有足够多的差异-足够我需要同时使用这两个文件。我在我的解决方案中添加了两个Web引用,这就是我的问题开始的地方。

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

    我的问题是:是否有任何方法可以做到以下一项或多项:

    1. 动态更改Web引用?
    2. 在同一个文件中使用两个Web引用,但将一个引用放在不同的命名空间中?
    3. 找到更好的解决方案?最后我得到了一个巨大的xmlserializer.dll(3MB!)-可能是因为使用了两个巨大的WSDL文件。

    谢谢你抽出时间。

    3 回复  |  直到 16 年前
        1
  •  2
  •   Traveling Tech Guy    17 年前

    事实上,解决方法要容易得多,而且藏在我的鼻子下面。
    我只是需要使用 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();
    .
    .
    .
    
        2
  •  0
  •   olle    17 年前

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

    1我想你是指网址?是的,创建客户端对象时可以

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

    2你什么意思?当您添加引用时,必须给它一个名称,将其放在一个唯一的名称空间中。像前一个例子中的acmeco。

    3这取决于你提到的5%的差异是什么?我不太明白,在两个不同的主机上,同一个WebService的WSDL最终会有什么不同。我认为只有地址会不同,但方法和参数会保持不变。也许你可以用埃拉博罗?

        3
  •  0
  •   John Saunders    17 年前

    他们之间有什么区别?我怀疑这只是一个可以定制的网站,所以你的沙盒和生产网站是不一样的。两个 需要 如果你想利用沙盒站点进行测试的能力,那就完全一样。

    推荐文章