Domanda

Come posso risolvere l'errore:

  

Impossibile leggere WSDL dall'URL: https://workflowtest.site.edu/ _vti_bin / Lists.asmx? WSDL .
  Errore: 401 non autorizzato.

Posso visualizzare correttamente il WSDL dal browser usando lo stesso account utente. Non sono sicuro di quale autenticazione venga utilizzata (di base o integrata).

Come lo scoprirò?

Il codice che effettua la chiamata è:

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

L'impressione che ottengo è che a ColdFusion non piace essere autenticato per ottenere il WSDL.

Traccia stack completo:

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)
È stato utile?

Soluzione

CFInvoke può solo passare l'autenticazione di base, non l'autenticazione integrata di Windows.

Sharepoint non sarà in grado di eseguire il downgrade all'autenticazione di base poiché sharepoint deve sapere chi sta chiamando i servizi per verificare l'autenticazione e l'autorizzazione dei dati richiesti.

La tua migliore scommessa qui è creare un servizio proxy asp.net che puoi chiamare con CFInvoke che rappresenterà l'autenticazione di Windows necessaria per chiamare il servizio web sharepoint.

Un'altra opzione sarebbe quella di creare un oggetto C # com che effettua la chiamata autenticata e restituisce le informazioni a CF quando si chiama l'oggetto C # com da CF.

Altri suggerimenti

Questo post sul blog su cfsilence.com potrebbe essere d'aiuto. ColdFusion / Sharepoint Integration - Parte 1 - Autenticazione

Cosa si riduce a:

  • ColdFusion utilizza la libreria del servizio Web Apache Axis
  • per impostazione predefinita, questa libreria non può fare altro che l'autenticazione HTTP di base
  • è possibile configurare Axis per utilizzare una libreria client HTTP alternativa (Jakarta Commons)
  • questo può eseguire l'autenticazione NTLM, non è necessario modificare il codice o lo schema di autenticazione IIS
  • dopo il riavvio di ColdFusion, dovresti essere pronto per andare

Non so nulla di ColdFusion ma il mio primo sospettato sarebbe un semplice problema di autorizzazione piuttosto che qualcosa di specifico per la FC.

Quella chiamata CF utilizza l'autenticazione di base o integrata? IIS corrisponde? Puoi navigare su WSDL usando IE / Firefox e lo stesso account utente?

È un errore di autorizzazione come darpy e Ryan suggeriscono, la cosa più semplice da fare è concedere l'autorizzazione giusta a ColdFusion. Su Windows, per impostazione predefinita ColdFusion viene eseguito come account di sistema locale. È possibile modificarlo aggiornando le proprietà LogOn del servizio Windows per ColdFusion.

Ho avuto lo stesso problema.

Apri IIS e modifica il Tipo di accesso in Base. (nella mia finestra tedesca è: " Verzeichnissicherheit " - > " Steuerung des Anonymen Zugriffs und der Authentifizierung " - > " Bearbeiten " - > imposta la casella di controllo per " Standardauthentifizierung ");

-Kevin

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top