С# Проблема с клиентом 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]()
Есть идеи?
Ответы
Ответ 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);