2009-06-18 25 views
12

Como pregunta, ¿cómo puedo llamar al cliente WCF desde Excel 2003 VBA?¿Cómo llamo al cliente WCF desde Excel 2003 VBA?

Vi que hay un lugar donde puedo llamar al servicio web, pero he buscado a través de Google, todos los resultados que obtengo no es posible llamar a un cliente WCF de VBA.

Me gustaría saber qué método usar antes de hacer algo con mi código, no quiero perder el tiempo y descubrir más tarde que no es posible hacer eso.

+1

¿Cómo se ve el código para llamar a un servicio web? No debería ser muy diferente, pero no estoy seguro. –

+1

Si Google no le dice cómo llamar a un servicio web desde Excel, ¿entonces tal vez la documentación de Excel o los recursos en línea lo harán? –

+1

¿Cuál es el motivo por el que desea utilizar un cliente WCF? ¿Cómo se ve el servicio remoto? ¿Utiliza seguridad, transacciones, colas? Puede ser más simple usar MSXML desde VBA, dependiendo del servicio objetivo. – Cheeso

Respuesta

2

Intenté por un tiempo llamar a un servicio wcf basado en SOAP de excel vba sin tener suerte.

En su lugar cambié mi servicio a REST vinculante (webHttpBinding). De esta forma, podría cargar el registro de datos en un mapa xml como si fuera cualquier otro archivo xml. Funcionó bien para mí, pero solo estaba tratando de importar algunos datos.

En cuanto a SOAP; una respuesta en este question menciona el Web Services Toolkit todos los ejemplos que pude encontrar sugeridos para usar.

1

He hecho esto con éxito limitado usando el Office 2003 Web Services Toolkit, pero no sin algunos problemas.

Tenga en cuenta que esto no es compatible con Microsoft, y tiene una serie de restricciones que pueden hacer que no sea apto para el uso en producción. P.ej. no es compatible con los servicios web que devuelven colecciones vacías: consulte this StackOverflow question.

Si desea seguir esta ruta a pesar de no ser compatible, descargue el kit de herramientas y envíe cualquier problema que tenga aquí.

Microsoft recomienda utilizar VSTO, pero esto no se integra fácilmente con VBA ...

2

No utilizaría VSTO en este caso. COM Interop es probablemente la mejor manera de hacerlo, siempre y cuando no desee ninguna seguridad en sus mensajes SOAP. cliente WCF

  1. escritura, la necesaria unión
  2. Expose montaje para interoperabilidad COM
  3. referencia de ensamblado expuesta en Excel VBA
12

Es posible que desee buscar en el uso del Servicio de Moniker WCF, que le permite invocar un servicio WCF desde VBA sin instalar nada en el equipo cliente de Excel que no sea .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) 

He escrito un complete step-by-step example.

/Damian

+0

Damian, ¿puede pasar una serie de primativos a su método wcf servcie? – priehl

+0

No recuerdo, pero estaba pasando una matriz variante; tal vez simplemente ponga los valores primitivos en el allí: devuelva el nuevo objeto [] {123, 456, 789}; – Damian

Cuestiones relacionadas