Вопрос

Как устранить ошибку:

Невозможно прочитать WSDL из URL: https://workflowtest.site.edu/_vti_bin/Lists.asmx?WSDL.
Ошибка:401 Несанкционированный.

Я могу успешно просматривать WSDL из браузера, используя ту же учетную запись пользователя.Я не уверен, какая аутентификация используется (базовая или интегрированная).

Как мне это узнать?

Код, осуществляющий вызов:

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

У меня сложилось впечатление, что ColdFusion не любит проходить аутентификацию для получения WSDL.

Полная трассировка стека:

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$000(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)
Это было полезно?

Решение

CFInvoke может проходить только базовую аутентификацию, но не встроенную аутентификацию Windows.

Sharepoint не сможет перейти на базовую аутентификацию, поскольку sharepoint необходимо знать, кто вызывает службы для проверки аутентификации и авторизации запрашиваемых данных.

Лучше всего создать прокси-службу asp.net, которую вы можете вызвать с помощью CFInvoke, которая будет выдавать себя за аутентификацию Windows, необходимую для вызова веб-службы sharepoint.

Другой вариант - создать объект C # com, который выполняет аутентифицированный вызов и передает информацию обратно в CF при вызове объекта C # com из CF.

Другие советы

Эта запись в блоге на cfsilence.com может помочь. Интеграция ColdFusion/Sharepoint. Часть 1. Аутентификация

К чему это сводится:

  • ColdFusion использует библиотеку веб-сервисов Apache Axis.
  • по умолчанию эта библиотека не может делать ничего, кроме базовой HTTP-аутентификации.
  • вы можете настроить Axis для использования альтернативной клиентской библиотеки HTTP (Jakarta Commons).
  • здесь можно выполнять аутентификацию NTLM, нет необходимости менять код или схему аутентификации IIS
  • после перезапуска ColdFusion все будет в порядке

Я ничего не знаю о ColdFusion, но я подозреваю, что это будет простая проблема с разрешением, а не какая-то конкретная CF.

Использует ли этот вызов CF базовую или встроенную аутентификацию? Соответствует ли IIS? Можете ли вы перейти на WSDL с помощью IE / Firefox и той же учетной записи пользователя?

Если это ошибка разрешения, как предлагают Дарпи и Райан, самое простое, что нужно сделать - это предоставить разрешение ColdFusion. В Windows ColdFusion используется по умолчанию и работает как учетная запись локальной системы. Вы можете изменить это, обновив свойства LogOn службы Windows для ColdFusion.

У меня такая же проблема.

Откройте IIS и измените LoginType на Basic.(в моей немецкой Windows это:«Verzeichnissicherheit» -> «Steuerung des Anonymen Zugriffs und der Authentifizierung» -> «Bearbeiten» -> Установите флажок «Standardauthentifizierung» )

-Кевин

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top