2012-08-03 50 views
2

我试图得到一个REST服务ColdFusion的10成立,我有一些重大问题。我已经尝试了几种不同的安装配置,包括Windows 7和Vista,CF9和10共存和独立,IIS 7/7.5,Apache和Apache Tomcat。但是目前我只使用Vista,IIS7,CF10并使用默认网站。我一直得到基本相同的结果。的ColdFusion 10 REST - 500内部服务器错误

RUTH服务已在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:\ ColdFu sion10 \ CONFIG \ WSCONFIG \ 1 \ isapi_redirect.dll

我有双重和三重检查我的CF的配置,以及IIS正确的ISAPI筛选器。一切似乎都是按顺序进行的。不知道该怎么办,无所适从。

+0

过去几天我尝试了很多东西。我已经重新安装了IIS,现在只能运行CF10。现在,当我进入我的服务时,我得到:HTTP错误500.0 - 对象不是声明类的实例 – boyceofreason 2012-08-08 22:24:38

回答

0

我一直有与CF 10 REST的问题为好。尝试重新启动您的CF服务。每次我对REST CFC进行更改时,都必须重新启动。

+1

您可以使用Coldfusion Administrator的REST部分中的刷新按钮来完成更改,而不是完全重新启动coldfusion您的任何CFC – AngeloS 2012-08-07 15:54:59

+0

哦很酷,谢谢! – Russ 2012-08-08 16:16:53

+0

更好的是添加到你的onRequestStart(app.cfc):restInitApplication(getDirectoryFromPath(getCurrentTemplatePath()),this.name); - 将它包装在一个url参数中,所以你可以在需要时调用它,我们在生产中使用加密的密码 – 2012-09-17 23:35:11

0

它看起来像你缺少你restPath斜杠:

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

看看这篇文章,因为他有一些伟大的代码示例,将带你通过这个更好的细节:

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

+0

我读过那篇文章的次数超过了我想承认的。改变restPath没有帮助。谢谢 – boyceofreason 2012-08-08 22:26:03

+0

做日志给你任何见解?如果你去cfusion> logs> coldfusion-error.log那里可能有一些信息。我广泛使用它来调试我的CF 10 REST应用程序 – AngeloS 2012-08-09 15:29:01

0

我有一个工作REST成分,我发现的主要问题是,我升级的旧部件,免除您的所有其他功能 - 只有一个功能应具有列举HTTPMethod =“获取”,否则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">


还要使事情变得更容易,在你的应用程序。CFC requestOnStart尝试添加这个,如果你认为它会帮助(U可以使用密码或加密密钥也将其固定):

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

    } 
1

尝试把这个在你的功能

restPath="/" 
0

的无数个小时后,与此挣扎,问题本身固定时,我改变了“服务器映射”从我的REST服务配置(一个我在CF管理员设置):

/API

API

一旦予除去前述 '/',500错误走了。现在,我可以打电话给我的API如下:

本地主机/ REST/API /职位/ 1

0

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

我一直有新的品牌同样的问题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只包含一个函数tha牛逼返回的字符串:

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

有了这个初始设置,我得到了一个500错误,“对象不是声明类的一个实例,”在访问:“本地主机/ test.cfm”。很多配置和测试都没有结果。在CF管理员中宣布;重新启动CF;仅在代码中声明;仅在管理员中声明;直接浏览; cfhttp连接。没有工作。

然后我用REST CFC将一个Application.cfc文件添加到模型目录。 CFC中没有函数,只是Application.cfc文件中的一个,所以REST服务不会尝试从父文件夹中启动Application.cfc。

执行上下文的这种分离造成了所有差异。 500错误立即消失,REST响应按预期行事。所以,确保你的REST文件夹有自己的Application.cfc文件。它可以具有与父级Application.cfc文件相同的应用程序名称,但它不需要从父目录调用Application.cfc。

希望这可以帮助别人!

0

过去几周里,我一直在关注这件事。在本地机器上的开发服务器上,日志中没有真正的错误,这没有帮助。

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

此外,如果您删除服务器上的其余服务文件夹,则您的Rest服务将失败,并且必须将该文件夹放回以删除它。整个应用程序将废话。它不会让我在应用程序再次运行之前删除该特定服务而不将其放回(仅包含文件夹本身)。仅供参考