2009-06-18 15 views
12

Come richiesto, come posso chiamare il client WCF da Excel 2003 VBA?Come si chiama il client WCF da Excel 2003 VBA?

Ho visto che c'è un posto dove posso chiamare il servizio web, ma ho cercato attraverso Google, tutti i risultati che ottengo non è possibile chiamare un client WCF da VBA.

Mi piacerebbe sapere quale metodo utilizzare prima di fare qualsiasi cosa con il mio codice, non voglio perdere tempo e scoprire in seguito che non è possibile farlo.

+1

Com'è il codice per chiamare un servizio Web? Non dovrebbe essere molto diverso, ma non lo so per certo. –

+1

Se Google non ti dice come chiamare un servizio web da Excel, allora forse la documentazione di Excel o le risorse online lo faranno? –

+1

qual è il motivo per cui si desidera utilizzare un client WCF? Come si presenta il servizio remoto? Utilizza sicurezza, transazioni, accodamento? Potrebbe essere più semplice utilizzare MSXML da VBA, a seconda del servizio di destinazione. – Cheeso

risposta

2

Ho provato per un po 'a chiamare un servizio wcf basato su SOAP da excel vba senza alcuna fortuna.

Invece ho cambiato il mio servizio in associazione REST (webHttpBinding). In questo modo ho potuto caricare i dati in una mappa XML come se fosse un qualsiasi altro file xml. Ha funzionato bene per me, ma stavo solo cercando di importare alcuni dati.

Come per SOAP; una risposta in questo question menziona il Web Services Toolkit tutti gli esempi che potrei trovare suggeriti da usare.

1

L'ho fatto con un successo limitato usando lo Office 2003 Web Services Toolkit, ma non senza dolore.

Si noti che questo non è supportato da Microsoft e presenta una serie di restrizioni che potrebbero renderlo inadatto all'uso di produzione. Per esempio. non supporta i servizi Web che restituiscono raccolte vuote: vedere this StackOverflow question.

Se si desidera seguire questa rotta nonostante non sia supportata, scaricare il toolkit e inviare eventuali problemi che si verificano qui.

Microsoft consiglia di utilizzare VSTO, ma questo non si integra facilmente con VBA ...

2

Non vorrei usare VSTO in questo caso. COM Interop è probabilmente il modo migliore per andare, a patto che non vogliate alcuna sicurezza nei vostri messaggi SOAP.

  1. Write client WCF, con necessaria vincolante
  2. Esporre assembly per interoperabilità COM
  3. Riferimento assemblaggio esposto in Excel VBA
12

Si potrebbe desiderare di guardare con il servizio WCF moniker che consente di richiamare un servizio WCF da VBA senza installare nulla sul computer client Excel diverso da .NET Framework.

Dim addr As String 
addr = "service:mexAddress=""net.tcp://localhost:7891/Test/WcfService1/Service1/Mex""," 
addr = addr + "address=""net.tcp://localhost:7891/Test/WcfService1/Service1/""," 
addr = addr + "contract=""IService1"", contractNamespace=""http://tempuri.org/""," 
addr = addr + "binding=""NetTcpBinding_IService1"",bindingNamespace=""http://tempuri.org/""" 

Dim service1 As Object 
Set service1 = GetObject(addr) 

MsgBox service1.GetData(12) 

Ho scritto un complete step-by-step example.

/Damian

+0

Damian, sei in grado di passare una serie di primati al tuo metodo wcf servcie? – priehl

+0

Non ricordo, ma stavo passando una matrice variante - forse ho appena messo i valori primitivi nel lì: return new object [] {123, 456, 789}; – Damian