2008-10-03 7 views
3

Как решить ошибку:Несанкционированное Sharepoint WSDL из ColdFusion 8

Unable to read WSDL from URL: https://workflowtest.site.edu/_vti_bin/Lists.asmx?WSDL .
Error: 401 Unauthorized.

Я могу успешно просматривать 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) 

ответ

4

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

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

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

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

1

Я ничего не знаю о ColdFusion, но я мой первый подозреваемый будет простой проблемой permision, а не что-либо CF специфичны.

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

1

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

0

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

Откройте IIS и измените тип LoginType на Basic. (в моих немецких Windows, это: "Verzeichnissicherheit" -> "Steuerung де Anonymen Zugriffs унд дер Authentifizierung" -> "Bearbeiten" -> Установите флажок для "Standardauthentifizierung")

Кевин

3

Этот блог сообщение на cfsilence.com может помочь.ColdFusion/Sharepoint Integration - Part 1 - Authenticating

Что это сводится к тому:

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