Azure Service Busから中継できるRESTサービスをホストしようとしています。このブログを見たところ、質問に答えられるように見えましたが、残念ながら同じ結果が得られました。
これは、ブラウザでサービスをヒットしようとしたときに受け取る例外です。
ASP.NET互換性をサポートしていないため、サービスをアクティブ化できません。このアプリケーションでは、ASP.NET互換性が有効になっています。web.configでASP.NET互換モードをオフにするか、AspNetCompatibilityRequirements属性を、RequirementsMode設定が「Allowed」または「Required」のサービスタイプに追加します。
ServiceHostFactory
Azure Service Busに(経由でbasicHttpRelayBinding
)接続するからAzure Endpoint登録を除外すると、このエラーは発生せず、ローカルでサービスにアクセスできます。これは、RESTfulサービス(webHttpBinding
)とAzure Service Busリレーバインディング(basicHttpRelayBinding
)の両方をホストすることと関係があります。
global.asaxにサービスホスティングを追加します
protected void Application_Start(object sender, EventArgs e)
{
// Add REST service hosting.
RouteTable.Routes.Add(new ServiceRoute("myservice/rest",
new CustomWebServiceHostFactory(typeof(IMyService)),
typeof(MyServiceProvider)));
}
私はサービスプロバイダーを次のように装飾しました。
[ServiceBehavior(IncludeExceptionDetailInFaults = true)]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class MyServiceProvider : IMyService
{
...
}
IISで実行されているサービスインターフェイスのweb.configの値は次のとおりです。
<configSections>
<sectionGroup name="system.serviceModel" type="System.ServiceModel.Configuration.ServiceModelSectionGroup, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="standardEndpoints" type="System.ServiceModel.Configuration.StandardEndpointsSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
</sectionGroup>
</configSections>
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
<standardEndpoints>
<webHttpEndpoint>
<standardEndpoint helpEnabled="true" automaticFormatSelectionEnabled="true">
<security mode="None"/>
</standardEndpoint>
</webHttpEndpoint>
</standardEndpoints>
...
</system.serviceModel>
何か案は?