Как работать с файлами SalesForce WSDL для песочницы и рабочих сайтов в ASP.Net?

StackOverflow https://stackoverflow.com/questions/1418508

  •  07-07-2019
  •  | 
  •  

Вопрос

Мне нужно аутентифицировать пользователей и получать информацию о них из приложения ASP.Net. Поскольку у меня есть 2 сайта (песочница, рабочий) и 2 идентификатора организации - мне нужно было сгенерировать 2 файла SalesForce WSDL.

Я просмотрел 2 файла (каждый размером около 600 КБ), и, хотя они на 95% одинаковы, повсюду разбросано достаточно различий - достаточно, чтобы мне понадобилось использовать их оба. Я добавил обе ссылки в качестве веб-ссылки к своему решению, и вот здесь начинается моя проблема.

Очевидно, я не могу использовать обе ссылки в одном и том же файле, поскольку они содержат одинаковые классы / функции. В выходные я должен был написать быстрое и грязное решение, поэтому я просто создал 2 класса, каждый из которых использует свою веб-ссылку, но в остальном точную функциональность, и я использую соответствующий, основываясь на URL-адресе пользователя от. Это хорошо работает, но мне кажется плохим (читай: быстро и грязно) решением.

Мой вопрос: есть ли способ сделать одно или несколько из следующих действий:

<Ол>
  • изменить веб-ссылку на лету?
  • использовать обе веб-ссылки в одном файле, но поместить их в другое пространство имен?
  • найти лучшее решение для всей ситуации? Я обнаружил огромный XmlSerializer.dll (3 МБ!), Вероятно, из-за использования обоих огромных файлов WSDL.
  • Спасибо за ваше время.

    Это было полезно?

    Решение

    На самом деле решение было намного проще и скрывалось у меня под носом.
    Мне просто нужно было использовать псевдонимы пространства имен . Таким образом, я могу включить обе службы во время компиляции и решить, какие из них использовать во время выполнения:

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

    Другие советы

    Возможно, я что-то упустил, но постараюсь ответить:

    1 Я полагаю, вы имеете в виду URL? Да, вы можете при создании объекта клиента

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

    2 Что ты имеешь в виду? Когда вы добавляете ссылку, вы должны дать ей имя, которое помещает ее в уникальное пространство имен. Как и Acmeco в предыдущем примере.

    3 Это зависит от того, какую разницу в 5% вы упомянули? Я не совсем понимаю, как вы получаете различие в WSDL для одного и того же веб-сервиса на двух разных хостах. Я думаю, что будут отличаться только адреса, но методы и параметры останутся прежними. Возможно, вы можете разработать?

    Чем они отличаются? Я подозреваю, что это просто настраиваемый SalesForce.com, так что ваши песочница и производственные сайты не идентичны. Два должны быть идентичными, если вы собираетесь воспользоваться возможностью использовать сайт песочницы для тестирования.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top