2013-07-09 7 views
32

Sto cercando di scrivere una semplice applicazione C# console per testare l'API SOAP da qui: https://www.imailtest.co.uk/webservice/imail_api.asmx?wsdl (o https://www.imailtest.co.uk/webservice/imail_api.asmx per vedere i metodi API)C# client SOAP edizione - più di una configurazione dell'endpoint per ch contratto è stato trovato

Così, ho aggiunto questo riferimento e ha cercato di richiamare 2 metodi API (Authentiacate & ProcessPrintReadyPDF) chiama su di esso e ottenuto questo errore:

Error : An endpoint configuration section for contract 'ServiceReference1.imail_ apiSoap' could not be loaded because more than one endpoint configuration for th at contract was found. Please indicate the preferred endpoint configuration sect ion by name.

Ecco il mio codice 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(); 
} 

Ecco come ho aggiunto il riferimento al servizio al mio console app: http://i.imgur.com/mKmRyrI.png

Tutte le idee?

+0

Dove si trova la configurazione del client in web.config? – ChrisBint

+1

@ChrisBint -Non c'era web.config, tuttavia c'era un app.config con il seguente: http://pastebin.com/XhbK0YNk – Latheesan

+0

@CodeCaster - in realtà, il problema è descritto nella riga successiva 'perché più di uno configurazione del punto finale per th al contratto è stata trovata' – Latheesan

risposta

20

Credo che il problema è risolto tramite la definizione del nome del contratto in questo modo (in base alla mia screenshot):

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

Ora, non ho più ottenere un errore am e l'api sembra funzionare.

+0

Nel mio caso, I ... (1) Ha mostrato tutti i file nel solution explorer di Visual Studio (icona in alto). (2) Drilled down finché non ho potuto vedere configuration.svcinfo. (3) Ha aperto configuration.svcinfo e ha visto due endpoint elencati. (4) Scorrere fino all'estrema destra per ottenere il nome dell'endpoint che volevo (le informazioni in esso contenute sembravano l'esempio pubblicato da Sudil). Dato che non volevo eliminare un endpoint come suggerito sopra, ho solo aggiunto il nome del particolare endpoint che volevo usare come fece Latheesan. –

+0

Nota: sto solo eseguendo i test iniziali tramite un'app console in modo che web.config non si applichi/esista nel mio scenario, né credo che il file app.config. –

+0

questa dovrebbe essere la risposta più votata:/ – Sharky

72

Nel vostro App.config si può vedere qualche cosa come questa

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

rimuovere il secondo endpoint e ora dovrebbe essere così

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

ora eseguire il codice, spero tue opere di codice fine

+0

Grazie. Ha funzionato ... –

+3

Ha funzionato per me. Ma qualcuno sa perché questo passo è stato necessario? Perché Visual Studio ha aggiunto l'endpoint aggiuntivo? –

+0

Questo è un po '"hacky" no! – Caltor

1

Se si desidera mantenere entrambe le configurazioni del client nel file di configurazione, è sufficiente creare un'impostazione dell'applicazione.

Così il vostro file sarà App.config contiene questa voce che vi permetterà di specificare il punto finale che si desidera:

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

modo da poter utilizzare nel codice:

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

[Solved! just add the End point in the webservice's proxy class asp below screen shot

enter image description here

+0

Risolto il mio problema. Grazie per gli screenshot, bella dimostrazione! –

+1

Non si trova sull'attributo bindingConfiguration, ma sull'attributo name. –

Problemi correlati