3

如何解决错误:

无法从 URL 读取 WSDL: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)
4

5 回答 5

4

CFInvoke 只能通过基本认证,不能通过 windows 集成认证。

Sharepoint 将无法降级到基本身份验证,因为 sharepoint 需要知道谁在调用服务来检查所请求数据的身份验证和授权。

您最好的选择是创建一个您可以使用 CFInvoke 调用的 asp.net 代理服务,它将模拟您调用 sharepoint Web 服务所需的 Windows 身份验证。

另一种选择是创建一个 C# com 对象,当您从 CF 调用 C# com 对象时,它会进行经过身份验证的调用并将信息传递回 CF。

于 2008-10-14T12:59:17.893 回答
3

cfsilence.com 上的这篇博文可能会有所帮助。ColdFusion/Sharepoint 集成 - 第 1 部分 - 身份验证

它归结为:

  • ColdFusion 使用 Apache Axis Web 服务库
  • 默认情况下,这个库只能做基本的 HTTP 身份验证
  • 您可以将 Axis 配置为使用替代 HTTP 客户端库(Jakarta Commons)
  • 这个可以做 NTLM 认证,不​​需要改变代码或 IIS 认证方案
  • 重新启动 ColdFusion 后,您应该一切顺利
于 2009-04-15T16:46:05.443 回答
1

我对 ColdFusion 一无所知,但我的第一个怀疑是一个简单的权限问题,而不是任何特定于 CF 的问题。

该 CF 调用是使用基本身份验证还是集成身份验证?IIS 是否匹配?您可以使用 IE/Firefox 和相同的用户帐户浏览到 WSDL 吗?

于 2008-10-03T20:43:19.143 回答
1

这是 darpy 和 Ryan 建议的权限错误,最简单的方法是授予 ColdFusion 正确的权限。在 Windows 上,ColdFusion 默认并作为本地系统帐户运行。您可以通过更新 ColdFusion 的 Windows 服务的登录属性来更改它。

于 2008-12-17T16:10:11.990 回答
0

我有同样的问题。

打开 IIS,然后将 LoginType 更改为 Basic。(在我的德语 Windows 中是:“Verzeichnissicherheit”->“Steuerung des Anonymen Zugriffs und der Authentifizierung”->“Bearbeiten”-> 设置“Standardauthentifizierung”复选框)

-凯文

于 2009-04-14T14:04:25.060 回答