coldfusion 10 REST - 500内部服务器错误

时间:2012-08-03 02:13:19

标签: rest coldfusion coldfusion-10

我正在尝试在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过滤器。一切似乎都井然有序。不知道该怎么办,不知所措。

7 个答案:

答案 0 :(得分:1)

尝试将此功能放入您的功能

restPath="/"

答案 1 :(得分:1)

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

我一直在使用全新的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>

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

然后我使用REST CFC将Application.cfc文件添加到模型目录中。 CFC中没有函数,只是最简单的Application.cfc文件,因此REST服务不会尝试从父文件夹中激活Application.cfc。

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

希望这有助于其他人!

答案 2 :(得分:0)

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

答案 3 :(得分:0)

您的restPath

似乎缺少正斜杠
<cfcomponent rest="true" restPath="/hello">

查看这篇文章,因为他有一些很棒的代码示例,可以更详细地介绍这些:

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

答案 4 :(得分: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);

    }

答案 5 :(得分:0)

经过无数个小时的努力,当我从我的REST服务配置(我在CF管理员中设置的那个)更改“服务器映射”时,问题就解决了:

/ API

API

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

本地主机/休息/ API /作业/ 1

答案 6 :(得分:0)

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

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

此外,如果您删除服务器上的休息服务文件夹,您的Rest服务将失败,您必须将文件夹放回以删除它。整个应用程序将废弃。在应用程序再次运行之前,它不会让我删除该特定服务而不将其放回(只是文件夹本身,其中没有任何内容)。只是一个FYI