3

我创建了一个服务,它使用他们的 WSDL 通过 C# 与 SalesForce 平台进行通信。碰巧,SalesForce(相当合乎逻辑地)允许其平台的“沙盒”实例和其平台的“生产”实例。我的应用程序设计用于生产,但我一直在使用沙箱进行集成测试和单元测试。我现在已经到了需要部署到生产环境的地步。但是,我面临一个大问题,即如果我需要构建和测试新功能,我必须将 WSDL 从生产实例更新到沙盒实例,然后在添加新功能时来回交换。这是因为这两个 WSDL完全不同,我必须从它们生成代码!这不仅草率,而且很危险。

我想找到一种方法来使用注册表项、文本值或一些配置设置来告诉我的应用程序使用哪个 WSDL。麻烦是?我不知道如何解决这个问题。我的代码引用的对象正是从该 WSDL 生成的。有任何想法吗?

4

1 回答 1

3

两者之间的 WSDL 不应该完全不同!当然,除非在沙盒中创建了很多新对象和自定义字段并且尚未推送到生产环境中......

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

如果您真的关心数据模型,您可能会决定使用合作伙伴版本(生成的代码有点难看,因为它为您提供了通用的 sObjects 而不是更具体的 Account、Contact 等)。我总是对企业版很好(沙盒中的东西最终将其投入生产,一旦不同的系统开始依赖数据模型,团队就会尽可能地开始同步他们的版本)。


区分它们对我有用的方法是检查端点(在文件的最底部)。我正在做 PHP 集成,所以对我来说,动态翻转端点不是问题,而是“信任”相同的对象结构。不知道它在 C# 世界中的样子,这条信息最终在解析代码中的什么位置......祝你好运!

企业 - 沙盒

<service name="SforceService">
<documentation>Sforce SOAP API</documentation>
<port binding="tns:SoapBinding" name="Soap">
    <soap:address location="https://test.salesforce.com/services/Soap/c/26.0/(18 char sandbox Id)"/>
</port>
</service>

企业 - 生产

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

Partner WSDLs have "u" in the URL instead of "c" and they don't carry specific organisation's id: https://test.salesforce.com/services/Soap/u/26.0"/

(my small trick to memorize this is to think about it as "Client" or "Customized" and "Universal")

Edit: of course if you'll stick to "enterprise" the only endpoint you can really count on is production. Sandbox org ids change every time they're refreshed.

于 2012-11-01T19:37:17.313 回答