2011-02-03 25 views
1

私は多少で見つけ記事に基づいて非常に単純RESTサービス(.NET 3.5)を持っている:展開.NET RESTサービス - ページが見つかりません - 404エラー

http://swindelles.com/2008/07/11/creating-rest-web-services-in-c-sharp/

  • と -

http://swindelles.com/2008/07/22/creating-rest-web-services-in-c-sharp-2/

私は、Visual Studio内から実行するとき、それは動作します - つまり、ローカルホスト上でそれをホストすることにより、 Visual StudioのWebサーバーを介して。しかし、Visual Studioの「公開」を使用して展開用のファイルをビルドしてパッケージ化し、リモートの有料Webホストのサーバーにコピーすると、サービスにアクセスしようとすると404エラーが発生します。

最後にコードを掲載します。ここで

は、ローカルホスト上で動作するURLの例です:

http://localhost:5077/MathHttpHandler/?num=5 

(私は?num=5クエリ文字列パラメータを使用することによって、私は一種の純粋なRESTの概念に対してつもりだことを知っているが、それはあります

私のリモートWebホストのサーバーでは、 "公開された"ファイルをルートの直下のサブディレクトリにコピーしていましたが、/dev ")。ここで私が使用しようとしましたが、私はそうするときだけ404エラーを取得したURLの例です:

MathHttpHandler.cs:

using System.Web; 

namespace RestSpike02Library { 
    public class MathHttpHandler : RestHandlerBase { 
     public static string QS_NUM = "num"; 

     public override void ProcessRequest(HttpContext context) { 
      //Call the base method to set up everything to default values first 
      base.ProcessRequest(context); 

      if (context.Request.HttpMethod == "GET") { 
       int toSquare; 
       if (int.TryParse(context.Request.QueryString[QS_NUM], out toSquare)) { 
        int squared = toSquare * toSquare; 
        context.Response.Write(squared.ToString()); 
       } 
       else { 
        context.Response.Write("Invalid integer."); 
       } 
      } 
     } 
    } 
} 

ウェブ

http://<my domain>.com/dev/MathHttpHandler 
http://<my domain>.com/dev/MathHttpHandler/ 
http://<my domain>.com/dev/MathHttpHandler/5 
http://<my domain>.com/dev/MathHttpHandler/num=5 
http://<my domain>.com/dev/MathHttpHandler/?num=5 

ここでは、関連するファイルです。 config:

<?xml version="1.0"?> 
<configuration> 
    <system.web> 
     <customErrors mode="Off" /> 

     <!-- For IIS6 and earlier --> 
     <httpHandlers> 
      <add verb="*" path="MathHttpHandler/*" type="RestSpike02Library.MathHttpHandler, RestSpike02Library"/> 
     </httpHandlers> 
     <compilation debug="true"/> 
    </system.web> 

    <system.webServer> 
     <!-- For II7+ --> 
     <handlers> 
      <add name="MathHttpHandler" verb="*" path="MathHttpHandler/*" type="RestSpike02Library.MathHttpHandler, RestSpike02Library"/> 
     </handlers> 
    </system.webServer> 
</configuration> 

誰も私のファイルに何か問題が見えることはありますか?サーバー側で(何らかの構成のように)この作業を行う必要があるのでしょうか?

リモートサーバー(.ASMX、WCFなど)でサービスを実行しようとすると、同様の問題が発生しています。

ご協力いただきありがとうございます。

+0

リモートサービスが実際に実行されているIISのバージョンを知っていますか? –

+0

私が知る限り、彼らはIIS 7を使用しています。 – mahdaeng

答えて

0

皆様、ありがとうございます。私のホストにディレクトリが設定されている方法に何か問題があったことが判明しました。彼らは最後に問題を解決しましたが、問題の内容や解決方法を教えてくれませんでした。だから、私は彼らがそれを修正してうれしいですが、もう一方で、私はこの問題を将来どのように避けるべきか分かりません。

0

ファイルを「サブディレクトリ」にコピーすると、アプリケーションとして実行するように設定されているとしますか?

サブディレクトリ内のWeb.configファイルは、HttpHandlersを登録できません。これはルートアプリケーションの設定で行う必要があります。ノード<system.web><system.webserver>のノードを<location path="dev">ノード内にネストすることで、ノードを登録できます。

そうでなければ、アプリケーションとして実行するようにサブディレクトリを設定し、web.configの他の必要な部分を含めることができます。

+0

ありがとう、lukiffer。 「サブディレクトリをアプリケーションとして実行するように設定する」と言うと、正確にはどういう意味ですか?私は自分のWebホストのIISインターフェイスを使ってサブディレクトリを "applciation"(そして "仮想ディレクトリ")に設定しています。 – mahdaeng

+0

web.configをルートディレクトリに移動しようとしましたが、同じ結果。 – mahdaeng

関連する問題