2012-08-03 51 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服務將失敗,並且必須將該文件夾放回以刪除它。整個應用程序將廢話。它不會讓我在應用程序再次運行之前刪除該特定服務而不將其放回(僅包含文件夾本身)。僅供參考