web-dev-qa-db-fra.com

Problème de client c # Soap - plus d'une configuration de point de terminaison pour le contrat a été trouvée

J'essaie d'écrire une simple application console c # pour tester l'API SOAP d'ici: https://www.imailtest.co.uk/webservice/imail_api.asmx?wsdl (ou https://www.imailtest.co.uk/webservice/imail_api.asmx pour voir les méthodes api)

J'ai donc ajouté cette référence et essayé d'appeler 2 méthodes api (Authentiacate & ProcessPrintReadyPDF) et j'ai obtenu cette erreur:

Erreur: une section de configuration de point de terminaison pour le contrat "ServiceReference1.imail_ apiSoap" n'a pas pu être chargée car plusieurs configurations de point de terminaison pour le contrat ont été trouvées. Veuillez indiquer la section de configuration de noeud final préférée par son nom.

Voici mon code C #:

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();
}

Voici comment j'ai ajouté la référence de service à mon application console:

screenshot

Des idées?

50
Latheesan

Je crois que le problème est résolu en définissant le nom du contrat comme tel (basé sur ma capture d'écran):

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

Maintenant, je ne reçois plus d'erreur et l'api semble fonctionner.

28
Latheesan

Dans votre App.config, vous pouvez voir quelque chose comme ça

 <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>

supprimer le deuxième point de terminaison et maintenant il devrait être comme ça

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

maintenant exécutez le code, j'espère que votre code fonctionne bien

106
sudil ravindran pk

[Résolu! il suffit d'ajouter le point de fin dans la classe proxy du service Web asp ci-dessous capture d'écran

enter image description here

16
Ayaat Shifa

Si vous souhaitez conserver les deux configurations client dans votre fichier de configuration, créez simplement un paramètre d'application.

Votre fichier App.config contiendra donc cette entrée qui vous permettra de spécifier le point de terminaison que vous souhaitez:

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

Vous pouvez donc utiliser dans votre code:

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