2

我正在尝试在 Coldfusion 10 中设置 REST 服务,但遇到了一些重大问题。我尝试了几种不同的安装配置,包括 Windows 7 和 Vista、CF9 和 10 共存和独立、IIS 7/7.5、Apache 和 Apache Tomcat。但是目前我只在 Vista、IIS7、CF10 上使用默认网站。我一直得到基本相同的结果。

REST 服务已在 CF Admin - C:\inetpub\wwwroot\resttest\ 中正确注册,并且它识别出 CFC 已启用 REST。

这是我的简单资源:

<cfcomponent rest="true" restPath="hello">
    <cffunction name="sayHello" access="remote" returnType="String" httpMethod="GET">
        <cfset res="Hello World">
        <cfreturn res>
    </cffunction>
</cfcomponent>

我的电话:

<cfhttp url="http://127.0.0.1/rest/hello/" method="GET" result="res">

当我转储响应或转到该 URI 时,我收到 500 内部服务器错误:

请求的 URL 127.0.0.1:80/jakarta/isapi_redirect.dll

物理路径 C:\ColdFusion10\config\wsconfig\1\isapi_redirect.dll

我已经两次和三次检查了我的 cf 配置以及 IIS 是否有正确的 ISAPI 过滤器。一切似乎都井然有序。不知道在这里做什么,不知所措。

4

7 回答 7

2

这是一个非常有趣的解决方案...

我在使用全新的 HelloWorld.cfc 休息服务时遇到了同样的问题。当我将 Application.cfc 添加到 REST 目录时,500 服务器错误立即消失,一切都按预期运行。

这是我的文件结构:

<root_folder>/
    |-- Application.cfc
    |-- model/
         |-- HelloWorld.cfc
    |-- test.cfm

在根 Application.cfc 的 onRequestStart 函数中,我有以下行:

<cfset restInitApplication( "#GetDirectoryFromPath(GetCurrentTemplatePath())#model/" , "MyRestService") />

然后文件 test.cfm 包含一个简单的 cfhttp 请求,转储结果:

<cfhttp url="localhost/rest/MyRestService/hello" result="response" method="get"></cfhttp>
<cfdump var="#response#">

HelloWorld.cfc 仅包含一个返回字符串的函数:

<cfcomponent rest="yes" restpath="hello">
  <cffunction name="sayHi" access="remote" httpmethod="get" restpath="" returntype="string">
    <cfreturn "Hi World!" />
  </cffunction>
</cfcomponent>

使用此初始设置,我在访问:“localhost/test.cfm”时收到 500 错误,“对象不是声明类的实例”。很多配置和测试都没有结果。在 CF 管理员中声明;重启CF;仅在代码中声明;仅在管理员中声明;直接浏览;cfhttp 连接。没有任何效果。

然后,我将 Application.cfc 文件添加到带有 REST CFC 的模型目录中。CFC 中没有任何功能,只有最少量的 Application.cfc 文件,因此 REST 服务不会尝试从父文件夹中触发 Application.cfc。

这种执行上下文的分离使一切变得不同。500 错误立即消失,REST 响应按预期运行。因此,请确保您的 REST 文件夹有自己的 Application.cfc 文件。它可以与父 Application.cfc 文件具有相同的应用程序名称,但它不需要从父目录调用 Application.cfc。

希望这对其他人有帮助!

于 2013-06-21T23:58:43.850 回答
1

尝试将其放入您的功能中

restPath="/"
于 2012-10-04T05:13:58.530 回答
0

经过无数小时的努力,当我将 REST 服务配置(我在 CF Administrator 中设置的配置)的“服务器映射”从以下位置更改时,问题自行解决:

/api

api

一旦我删除了前面的“/”,500 错误就消失了。现在我可以按如下方式调用我的 API:

本地主机/rest/api/jobs/1

于 2012-11-21T20:13:24.450 回答
0

我也遇到了 CF 10 REST 的问题。尝试重新启动您的 CF 服务。每次对 REST CFC 进行更改时,我都必须重新启动。

于 2012-08-04T01:48:57.917 回答
0

看起来您的 : 中缺少正斜杠restPath

<cfcomponent rest="true" restPath="/hello">

查看这篇文章,因为他有一些很棒的代码示例,可以让您更详细地了解这一点:

http://www.adobe.com/devnet/coldfusion/articles/restful-web-services.html

于 2012-08-07T16:09:26.917 回答
0

我有一个工作的 REST 组件,我发现的主要问题是我升级了一个旧组件,删除了所有其他功能 - 只有一个功能应该有 httpmethod="get",否则 CF 不知道要调用哪个(其他应该是 POST 吗?)

另外我在函数上有一个restpath attr,在cfscript中:

remote struct function readRole(required numeric site_role_id restargsource="path") httpmethod="get" returnformat="json" restpath="{site_role_id}" {

注释掉所有其他函数,然后测试一下: <cfhttp url="http://127.0.0.1/rest/hello/1" method="GET" result="res">


另外为了让事情更容易,如果您认为它会有所帮助,请在您的 App.cfc requestOnStart 中尝试添加它(您也可以使用密码或加密密钥来保护它):

if (SERVER.ColdFusion.ProductVersion GTE 10 AND structKeyExists(url, "refreshRESTful"))
    {
        restInitApplication(getDirectoryFromPath(getCurrentTemplatePath()), this.name);

    }
于 2012-09-17T23:34:16.863 回答
0

过去几周我一直在为此绞尽脑汁。在我本地机器上的开发服务器上,日志中没有真正的错误,这没有帮助。

我认为它可能是我的机器,所以我将它推送到我的共享托管环境中,并且发生了同样的问题。一旦我把 application.cfc 放在那里,我还没有收到 500 错误,并且性能也从每个请求 1.2 秒增加到每个请求大约 100-200 毫秒,没有错误。

此外,如果您删除服务器上的休息服务文件夹,您的休息服务将失败,您必须将文件夹放回去才能删除它。整个应用程序都会崩溃。在应用程序再次运行之前,它不会让我删除该特定服务而不将其放回(只是文件夹本身,其中没有任何内容)。仅供参考

于 2013-10-06T04:31:56.020 回答