1

ルーティングを有効にしてシンプルな REST サービスを作成しました。ローカルで、つまりasp.net開発サーバーを使用して実行すると、ルーティングが正しく機能します。しかし、IIS (IIS 7.5) にアプリケーションを展開し、サービスのメソッドにアクセスしようとすると、エラーHTTP 404.0 Not foundが発生します。これが私のコードです:

[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class HelloWorldService
{

    [WebGet(UriTemplate = "Date")]
    public DateTime Date()
    {
        return System.DateTime.Now;
    }

}

Global.asax:

    protected void Application_Start(object sender, EventArgs e)
    {
        RegisterRoutes();
    }
    private void RegisterRoutes()
    {           
        RouteTable.Routes.Add(new ServiceRoute("ServiceData", new WebServiceHostFactory(), typeof(HelloWorldService)));
    }

Web.config:

<configuration>
<system.web>
    <compilation debug="true" targetFramework="4.0" />
</system.web>

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
        <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    </modules>
</system.webServer>

<system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
    <standardEndpoints>
        <webHttpEndpoint>
            <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true"/>
        </webHttpEndpoint>
    </standardEndpoints>
</system.serviceModel>

</configuration>

下でHTTPリダイレクト機能も有効にしました

Windows の機能 -> インターネット インフォメーション サービス -> Word Wide Web サービス -> 一般的な HTTP 機能

私も次のようなハンドラを追加しようとしました

<handlers>
  <add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd" type="System.Web.HttpForbiddenHandler, System.Web, 
       Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</handlers>

また、ウェブで提案された他のすべてのソリューションを試しましたが、何も機能しません。助けてくれてありがとう。

4

1 に答える 1

0

RegisterRoutes() に問題があります。そのはず:

 private void RegisterRoutes()
    {
        // Edit the base address of Service1 by replacing the "Service1" string below
        RouteTable.Routes.Add(new ServiceRoute("HelloWorldService", new WebServiceHostFactory(), typeof(HelloWorldService)));
    }

ここに画像の説明を入力

于 2013-01-11T07:38:38.140 に答える