Pregunta

¿Cómo resuelvo el error?

  

No se puede leer WSDL desde la URL: https://workflowtest.site.edu/ _vti_bin / Lists.asmx? WSDL .
  Error: 401 no autorizado.

Puedo ver con éxito el WSDL desde el navegador usando la misma cuenta de usuario. No estoy seguro de qué autenticación se está utilizando (Básica o Integrada).

¿Cómo podría averiguarlo?

El código que realiza la llamada es:

<cfinvoke 
  username="username" 
  password="password"
  webservice="https://workflowtest.liberty.edu/_vti_bin/Lists.asmx?WSDL" 
  method="GetList" 
  listName="{CB02EB71-392E-4906-B512-8EC002F72436}"
>

La impresión que tengo es que a ColdFusion no le gusta que se realice la autenticación para obtener el WSDL.

Rastreo de pila completa:

coldfusion.xml.rpc.XmlRpcServiceImpl$CantFindWSDLException: Unable to read WSDL from URL: https://workflowtest.liberty.edu/_vti_bin/Lists.asmx?WSDL.
  at coldfusion.xml.rpc.XmlRpcServiceImpl.retrieveWSDL(XmlRpcServiceImpl.java:709)
  at coldfusion.xml.rpc.XmlRpcServiceImpl.access<*>(XmlRpcServiceImpl.java:53)
  at coldfusion.xml.rpc.XmlRpcServiceImpl$1.run(XmlRpcServiceImpl.java:239)
  at java.security.AccessController.doPrivileged(Native Method)
  at coldfusion.xml.rpc.XmlRpcServiceImpl.registerWebService(XmlRpcServiceImpl.java:232)
  at coldfusion.xml.rpc.XmlRpcServiceImpl.getWebService(XmlRpcServiceImpl.java:496)
  at coldfusion.xml.rpc.XmlRpcServiceImpl.getWebServiceProxy(XmlRpcServiceImpl.java:450)
  at coldfusion.tagext.lang.InvokeTag.doEndTag(InvokeTag.java:413)
  at coldfusion.runtime.CfJspPage._emptyTcfTag(CfJspPage.java:2662)
  at cftonytest2ecfm1787185330.runPage(/var/www/webroot/tonytest.cfm:16)
  at coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:196)
  at coldfusion.tagext.lang.IncludeTag.doStartTag(IncludeTag.java:370)
  at coldfusion.filter.CfincludeFilter.invoke(CfincludeFilter.java:65)
  at coldfusion.filter.ApplicationFilter.invoke(ApplicationFilter.java:279)
  at coldfusion.filter.RequestMonitorFilter.invoke(RequestMonitorFilter.java:48)
  at coldfusion.filter.MonitoringFilter.invoke(MonitoringFilter.java:40)
  at coldfusion.filter.PathFilter.invoke(PathFilter.java:86)
  at coldfusion.filter.ExceptionFilter.invoke(ExceptionFilter.java:70)
  at coldfusion.filter.BrowserDebugFilter.invoke(BrowserDebugFilter.java:74)
  at coldfusion.filter.ClientScopePersistenceFilter.invoke(ClientScopePersistenceFilter.java:28)
  at coldfusion.filter.BrowserFilter.invoke(BrowserFilter.java:38)
  at coldfusion.filter.NoCacheFilter.invoke(NoCacheFilter.java:46)
  at coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:38)
  at coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22)
  at coldfusion.CfmServlet.service(CfmServlet.java:175)
  at coldfusion.bootstrap.BootstrapServlet.service(BootstrapServlet.java:89)
  at jrun.servlet.FilterChain.doFilter(FilterChain.java:86)
  at coldfusion.monitor.event.MonitoringServletFilter.doFilter(MonitoringServletFilter.java:42)
  at coldfusion.bootstrap.BootstrapFilter.doFilter(BootstrapFilter.java:46)
  at jrun.servlet.FilterChain.doFilter(FilterChain.java:94)
  at jrun.servlet.FilterChain.service(FilterChain.java:101)
  at jrun.servlet.ServletInvoker.invoke(ServletInvoker.java:106)
  at jrun.servlet.JRunInvokerChain.invokeNext(JRunInvokerChain.java:42)
  at jrun.servlet.JRunRequestDispatcher.invoke(JRunRequestDispatcher.java:286)
  at jrun.servlet.ServletEngineService.dispatch(ServletEngineService.java:543)
  at jrun.servlet.jrpp.JRunProxyService.invokeRunnable(JRunProxyService.java:203)
  at jrunx.scheduler.ThreadPool$DownstreamMetrics.invokeRunnable(ThreadPool.java:320)
  at jrunx.scheduler.ThreadPool$ThreadThrottle.invokeRunnable(ThreadPool.java:428)
  at jrunx.scheduler.ThreadPool$UpstreamMetrics.invokeRunnable(ThreadPool.java:266)
  at jrunx.scheduler.WorkerThread.run(WorkerThread.java:66)
¿Fue útil?

Solución

CFInvoke solo puede pasar la autenticación básica, no la autenticación integrada de Windows.

Sharepoint no podrá degradarse a la autenticación básica ya que necesita saber quién llama a los servicios para verificar la autenticación y la autorización de los datos solicitados.

Su mejor opción aquí es crear un servicio de proxy asp.net al que pueda llamar con CFInvoke, que suplantará la autenticación de Windows que necesita para llamar al servicio web de sharepoint.

Otra opción sería crear un objeto C # com que realice la llamada autenticada y pase la información a CF cuando llame al objeto C # com desde CF.

Otros consejos

Esta publicación de blog en cfsilence.com podría ayudar. ColdFusion / Sharepoint Integración - Parte 1 - Autenticación

Lo que se reduce a:

  • ColdFusion utiliza la biblioteca de servicios web Apache Axis
  • de forma predeterminada, esta biblioteca no puede hacer nada más que la autenticación HTTP básica
  • puede configurar Axis para usar una biblioteca de cliente HTTP alternativa (Jakarta Commons)
  • éste puede realizar la autenticación NTLM, sin necesidad de cambiar el código o el esquema de autenticación IIS
  • después de reiniciar ColdFusion, deberías estar listo para ir

No sé nada acerca de ColdFusion, pero mi primer sospechoso sería un simple problema de permiso en lugar de cualquier cosa específica de CF.

¿Esa llamada CF utiliza autenticación básica o integrada? ¿Coincide IIS? ¿Puede navegar al WSDL utilizando IE / Firefox y la misma cuenta de usuario?

Es un error de permiso como Darpy y Ryan sugieren, lo más fácil es otorgar el permiso correcto a ColdFusion. En Windows, ColdFusion se ejecuta de forma predeterminada como la cuenta del sistema local. Puede cambiar eso actualizando las propiedades de Inicio de sesión del Servicio de Windows para ColdFusion.

Tuve el mismo problema.

Abra su IIS y cambie el LoginType a Basic. (en mi Windows alemán es: " Verzeichnissicherheit " - > " Steuerung des Anonymen Zugriffs und der Authentifizierung " - > " Bearbeiten " - > Establezca la casilla de verificación para & Standard; Standardauthentifizierung ")

-Kevin

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top