2013-07-19 17 views
14

Sto utilizzando NSIS per creare un programma di installazione e come parte di tale programma di installazione ottengo i dettagli per un servizio WCF (vale a dire Url, nome utente e password). Ho bisogno di convalidare questi dettagli.Come posso creare un client di servizio web/wcf in C++?

In C# ho creare un riferimento di servizio e semplicemente effettuare le seguenti operazioni:

var proxy = new ServiceClient(httpsBinding, serviceEndpointAddress); 
proxy.ClientCredentials.UserName.UserName = userName; 
proxy.ClientCredentials.UserName.Password = password; 

try 
{ 
    proxy.Open(); 
} 
catch (EndpointNotFoundException ex) 
{ 
    // Return the end point's not valid 
} 
etc 

Ora ho bisogno di fare questo in C++ in modo che possa essere chiamato da NSIS (ho studiato metodi di chiamare C# da NSIS e sembrano tutti eccessivi per quello che voglio fare). Sono riuscito a convertire il codice che genera l'associazione e l'indirizzo del punto finale, tuttavia sono bloccato sulla creazione dello ServiceClient.

Ho aggiunto un "Riferimento Web" al progetto ma non c'è l'equivalente di ServiceClient nello spazio dei nomi ServiceReference. Questo:

ServiceReference::ServiceClient ^service = gcnew ServiceReference::ServiceClient(httpsBinding, endpointAddress); 

non può essere compilato come:

'serviceclient': non è un membro di 'ServiceReference'

Così come creo il cliente?

+0

Hai inserito la direttiva 'using namespace ServiceMainNamespace' relativa al servizio web che hai aggiunto? – alexbuisson

+0

@alexbuisson - Non riesco a trovare quello spazio dei nomi. Puoi aggiungere un link alla documentazione. – ChrisF

+0

Ok scusa, quel namespace non esiste :) era solo un esempio per ricordare che in C# la classe ServiceClient proviene da un assembly e dovresti essere in grado di trovarne il nome. L'assembly Thaa dovrebbe essere incluso nell'elenco di riferimento di C++/CLI e nel file .cpp in cui si utilizza 'ServiceClient' è necessario inserire una direttiva using. Come in C#! – alexbuisson

risposta

0

Alla fine sono andato usando NSIS "Call .NET DLL methods plugin" che era davvero eccessivo per quello che dovevo fare, ma avevo bisogno di una soluzione che funzionasse e il tempo fosse scaduto.

0

hai provato gSOAP?

http://gsoap2.sourceforge.net/

che è quello che stiamo usando per WS accesso * da programmi C++.

+0

Non ho davvero bisogno di nulla di così complesso. Tutto quello che devo fare è verificare l'url, il nome utente e la password. Non ho bisogno di ottenere dati. – ChrisF

0

È possibile fare un buon lavoro, Creare una DLL C#, utilizzare regasm per registrare questa DLL, quindi è possibile utilizzarlo dal programma C++.

+0

Questo è eccessivo per qualcosa che viene chiamato una sola volta dall'installatore solo per convalidare i dettagli dell'account. – ChrisF

Problemi correlati