安らかなWCF Webサービスを作成しようとしています。クライアントを介してサービスに接続しようとすると、次のエラーが表示されます。
ASP.NET互換性をサポートしていないため、サービスをアクティブにできません。このアプリケーションでASP.NET互換性が有効になっています。web.configでASP.NET互換性モードをオフにするか、AspNetCompatibilityRequirements属性をサービスタイプに追加しますRequirementsModeを「Allowed」または「Required」に設定してください。
他にも問題がありましたが、web.configを変更することで修正しました。私はそれらの修正を実装しましたが、それでも問題は存在します。ここに私のweb.configがあります:
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="WebBehavior" >
<webHttp />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="MyServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
<behavior name="">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="MyServiceBehavior" name="myfirstwcf">
<endpoint address="ws" binding="basicHttpBinding"
contract="Imyfirstwcf" />
<endpoint address="ws2" binding="wsHttpBinding"
contract="Imyfirstwcf" />
<endpoint address="" behaviorConfiguration="WebBehavior"
binding="webHttpBinding"
contract="Imyfirstwcf" />
<endpoint address="mex" binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
</services>
<serviceHostingEnvironment aspNetCompatibilityEnabled= "true"
multipleSiteBindingsEnabled="true" />
</system.serviceModel>
メインサービスで、サービスを次のようにマークできます。
[AspNetCompatibilityRequirements(
RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
それが動作します :
コードで次の行を変更するか、web.configに次の行を追加します。
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="false" multipleSiteBindingsEnabled="true" />
</system.serviceModel>
誰かが多くのサービスを持ち、カスタムServiceHostFactory
を使用してサービスが作成される場合、AspNetCompatibilityRequirementsAttribute
メソッドでCreateServiceHost
を設定することもできます。
例:
public class HostFactory : ServiceHostFactory
{
protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
{
var Host = new ServiceHost(serviceType, baseAddresses);
//other relevent code to configure Host's end point etc
if (Host.Description.Behaviors.Contains(typeof(AspNetCompatibilityRequirementsAttribute)))
{
var compatibilityRequirementsAttribute = Host.Description.Behaviors[typeof(AspNetCompatibilityRequirementsAttribute)] as AspNetCompatibilityRequirementsAttribute;
compatibilityRequirementsAttribute.RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed;
}
else
{
Host.Description.Behaviors.Add(new AspNetCompatibilityRequirementsAttribute() { RequirementsMode =AspNetCompatibilityRequirementsMode.Allowed});
}
return Host;
}
}
実際、最新のドキュメントによると、2つのことを行う必要があります。
1.サービスクラスの場合:
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(Namespace = "url")]
public class Service : IService
{
}
2. web.configの場合
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>