如何使用两个WSDL并使用C#应用程序维护测试实例?

我创建了一个服务,通过C#使用他们的WSDL与SalesForce平台进行通信。 碰巧SalesForce(相当逻辑上)允许其平台的“沙盒”实例和其平台的“生产”实例。 我的应用程序旨在与生产一起使用,但我一直在使用沙箱进行集成测试和unit testing。 我现在已经到了需要部署到生产的地步。 但是,我遇到一个大问题,如果我需要构建和测试新function,我将不得不将WSDL从生产实例更新到沙箱实例,然后在添加新function时来回切换。 这是因为两个WSDL 完全不同 ,我必须从它们生成代码! 这不仅是草率的,而且是危险的。 我可能会影响我的一些实时系统数据。

我想找到一种方法来使用注册表项,文本值或一些配置设置来告诉我的应用程序使用哪个WSDL。 麻烦是? 我无法弄清楚人们如何接近这一点。 我的代码引用的对象是从该WSDL生成的。 有任何想法吗?

WSDL在两者之间不应该完全不同! 当然,除非在沙箱中创建了许多新对象和自定义字段,但尚未推向生产…

您是否有机会混合企业(强类型版本)和合作伙伴(更通用的)WSDL? 有关详细信息,请查看此帮助主题: http : //www.salesforce.com/us/developer/docs/api/Content/sforce_api_quickstart_intro.htm#choose_wsdl

如果您真的关心数据模型,您可能决定使用合作伙伴版本(生成的代码有点难看,因为它为您提供了通用的sObject而不是更具体的帐户,联系人等)。 我对企业版本总是很好(来自沙盒的东西最终使它成为生产,一旦不同的系统开始依赖于数据模型团队,如果可能的话,他们就开始同步他们的版本)。


区分对我有用的方法是检查端点(在文件的最底部)。 我正在进行PHP集成,所以对我来说,动态翻转端点但“信任”相同的对象结构并不是一个问题。 不知道它在C#世界中的样子,这段信息最终会在解析的代码中出现…祝你好运!

企业 – 沙盒

 Sforce SOAP API     

企业 – 生产

 https://login.salesforce.com/services/Soap/c/26.0/(prod id) 

合作伙伴WSDL在URL中有“u”而不是“c”,并且它们没有特定组织的id: https://test.salesforce.com/services/Soap/u/26.0"/https://test.salesforce.com/services/Soap/u/26.0"/

(记住这个的小技巧是将其视为“客户”或“定制”和“通用”)

编辑:当然,如果你坚持“企业”,你真正可以信赖的唯一终点是生产。 每次刷新时,沙箱组织都会发生变化。