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:
Des idées?
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.
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
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);