0
public class Global : HttpApplication
{
    protected void Application_Start(object sender, EventArgs e)
    {
        RegisterRoutes(RouteTable.Routes);
    }

    private static void RegisterRoutes(ICollection<RouteBase> routes)
    {
        routes.Add(new ServiceRoute("Calculator", new WebServiceHostFactory(), typeof(CalculatorService)));
    }
}

<system.serviceModel>
  <serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true">
    <serviceActivations>
      <add factory="System.ServiceModel.Activation.ServiceHostFactory"
           relativeAddress="Calculator.svc"
           service="MyServer.CalculatorService"/>
    </serviceActivations>
  </serviceHostingEnvironment>
</system.serviceModel>

これを行ってhttp://localhost/MyApp/Calculator.svcにアクセスすると、AspNetCompatability が必要だというエラーが表示されます。だから私は追加[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]しましたが、それは機能します。唯一のことは、代替の非httpバインディングを使用したい場合、サービスが代替のトランスポート手段(httpだけでなく)を使用することを心配していることです。

奇妙なことに、属性を Allowed または Required に設定しないと、ページを再構築するとエラーが発生します。そのエラーが発生した後、更新を押すとすべて問題ありません。また、Web ブラウザーを介して svc を照会した場合だけではありませんが、アプリがある場合、最初に接続したときにクラッシュし (サーバーが再起動された場合)、その後は動作します。何を与える?

4

2 に答える 2

2

あなたの問題は設定がめちゃくちゃだと思います。ルートを追加していると同時に、構成ベースのアクティベーションでサービスを登録しています。1 つまたは 2 つ目のいずれかを使用します。また、ルートを使用して、HTTP ベースのプロトコルまたは非 HTTP プロトコルのみを使用できますが、ルートは使用できません。

于 2011-06-03T18:51:44.587 に答える
1

残念ながら、使用するには ASP.NET 互換性を有効にする必要がありますServiceRoutes。これは、IIS モジュールだけでなく、ASP.NET ランタイムがトラフィックのルーティングを担当するようになったためです。

于 2011-06-03T18:46:52.053 に答える