2

Coldfusion 10でRESTサービスをセットアップしようとしていますが、いくつかの大きな問題があります。Windows 7とVista、CF9と10が共存し、スタンドアロン、IIS 7 / 7.5、ApacheとApacheTomcatでいくつかの異なるインストール構成を試しました。ただし、現時点では、Vista、IIS7、CF10のみを使用しており、既定のWebサイトを使用しています。基本的に同じ結果が得られます。

RESTサービスはCFAdmin(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内部サーバーエラーが発生します。

要求されたURL127.0.0.1:80/jakarta/isapi_redirect.dll

物理パスC:\ ColdFusion10 \ config \ wsconfig \ 1 \ isapi_redirect.dll

cfconfigとIISで正しいISAPIフィルターを2回および3回チェックしました。すべてが順調に進んでいるようです。途方に暮れて、ここで何をすべきかわからない。

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 には、文字列を返す関数が 1 つだけ含まれています。

<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 接続。何も機能しませんでした。

次に、REST CFC を含むモデル ディレクトリに Application.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

スラッシュが欠落しているようですrestPath

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

この記事をチェックしてください。彼には、これをより詳細に説明する優れたコードサンプルがいくつかあります。

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

于 2012-08-07T16:09:26.917 に答える
0

CF 10 REST でも問題が発生しています。CF サービスを再起動してみてください。REST CFC に変更を加えるたびに再起動する必要があります。

于 2012-08-04T01:48:57.917 に答える
0

これに何時間も苦労した後、REST サービス構成 (CF アドミニストレーターで設定したもの) の「サーバー マッピング」を次のように変更すると、問題は解決しました。

/api

API

先行する「/」を削除すると、500 エラーはなくなりました。これで、次のように API を呼び出すことができます。

ローカルホスト/残り/api/ジョブ/1

于 2012-11-21T20:13:24.450 に答える
0

私は動作中の REST コンポーネントを持っています。私が見つけた主な問題は、古いコンポーネントをアップグレードし、他のすべての関数を削除したことでした。ポストですか?)

また、関数には cfscript の restpath 属性があります。

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 ミリ秒に向上しました。

また、サーバー上の Rest サービス フォルダーを削除すると、Rest サービスが失敗し、削除するにはフォルダーを元に戻す必要があります。アプリ全体ががらくたになります。アプリが再び機能する前に、その特定のサービスを元に戻さずに削除することはできません(フォルダー自体だけで、何も含まれていません)。参考までに

于 2013-10-06T04:31:56.020 に答える