Подтвердить что ты не робот

С# Проблема с клиентом Soap - было найдено более одной конфигурации конечной точки для контракта по контракту

Я пытаюсь написать простое консольное приложение на С# для тестирования SOAP API отсюда: https://www.imailtest.co.uk/webservice/imail_api.asmx?wsdl (или https://www.imailtest.co.uk/webservice/imail_api.asmx, чтобы увидеть методы API)

Итак, я добавил эту ссылку и попытался вызвать 2 вызова API (Authentiacate & ProcessPrintReadyPDF), вызвав ее, и получил эту ошибку:

Ошибка: не удалось загрузить раздел конфигурации конечной точки для контракта "ServiceReference1.imail_ apiSoap", так как было найдено более одной конфигурации конечной точки для th в контракте. Пожалуйста, укажите предпочитаемый раздел конфигурации конечной точки по имени.

Вот мой код С#:

static void Main(string[] args)
{
    // Anticipate Error
    try
    {
        // Generate SOAP Client
        ServiceReference1.imail_apiSoapClient soapClient = new ServiceReference1.imail_apiSoapClient();

        // Login
        Console.WriteLine("Authenticating");
        soapClient.Authenticate(iMailUser, iMailPass);

        // Proceed If PDF File Exists
        if (File.Exists(PDFFile))
        {
            // Upload PDF File To iMail
            Console.WriteLine("Uploading PDF File");
            soapClient.ProcessPrintReadyPDF(File.ReadAllBytes(PDFFile), "", true);

            // Test Complete
            Console.WriteLine("Done");
        }
        else
        {
            // Log Error
            Console.WriteLine("PDF File [{0}] Does Not Exists", PDFFile);
        }
    }
    catch (Exception ex)
    {
        // Log Error
        Console.WriteLine("Error : "+ ex.Message);
    }

    // End Test
    Console.WriteLine("Press any key to continue ...");
    Console.ReadKey();
}

Вот как я добавил сервисную ссылку в мое консольное приложение:

screenshot

Есть идеи?

4b9b3361

Ответ 1

Я считаю, что проблема решена путем определения имени контракта так (на основе моего снимка экрана):

ServiceReference1.imail_apiSoapClient soapClient = 
new ServiceReference1.imail_apiSoapClient("imail_apiSoap");

Теперь я больше не получаю ошибку, и api, похоже, работает.

Ответ 2

В вашем App.config вы можете увидеть что-то вроде этого

 <client>
      <endpoint address="https://www.imailtest.co.uk/webservice/imail_api.asmx "
        binding="basicHttpBinding" bindingConfiguration="xxxxxxxxxx"
        contract="xxxxxxxxxx" name="xxxxxxxxxxxxx" />
      <endpoint address="https://www.imailtest.co.uk/webservice/imail_api.asmx"
        binding="customBinding" bindingConfiguration="xxxxxxxxxxxxx"
        contract="xxxxxxxxxxx" name="xxxxxxxxxxxxx" />
  </client>

удалите вторую конечную точку, и теперь она должна быть такой

<client>
      <endpoint address="https://www.imailtest.co.uk/webservice/imail_api.asmx "
        binding="basicHttpBinding" bindingConfiguration="xxxxxxxxxxxxx"
        contract="xxxxxxxxxxxxxx" name="xxxxxxxxxxxxxxx" />      
  </client>

теперь запустите код, надейтесь, что ваш код отлично работает

Ответ 3

[Решено! просто добавьте конечную точку в прокси-сервер класса веб-службы под снимком экрана ниже

enter image description here

Ответ 4

Если вы хотите сохранить обе конфигурации клиента в своем конфигурационном файле, просто создайте приложение.

Таким образом, ваш файл App.config будет содержать эту запись, которая позволит вам указать конечную точку, которую вы хотите:

<setting name="EndPoint" serializeAs="String">
    <value>imail_apiSoap</value>
</setting>

Итак, вы можете использовать в своем коде:

ServiceReference1.imail_apiSoapClient soapClient =
    new ServiceReference1.imail_apiSoapClient(Properties.Settings.Default.EndPoint);