WCF Web 服务错误:无法激活该服务,因为它不支持 ASP.NET 兼容性

Posted

技术标签:

【中文标题】WCF Web 服务错误:无法激活该服务,因为它不支持 ASP.NET 兼容性【英文标题】:WCF web service error: The service cannot be activated because it does not support ASP.NET compatibility 【发布时间】:2012-08-07 21:43:58 【问题描述】:

我正在尝试创建一个宁静的 wcf 网络服务。当我尝试通过客户端连接到服务时,出现以下错误:

该服务无法激活,因为它不支持 ASP.NET 兼容性。为此应用程序启用了 ASP.NET 兼容性。在 web.config 中关闭 ASP.NET 兼容模式,或将 AspNetCompatibilityRequirements 属性添加到服务类型,并将 RequirementsMode 设置为“允许”或“必需”。

其他人遇到了问题,但他们通过更改 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>

【问题讨论】:

***.com/questions/9793233/…的可能重复 【参考方案1】:

在您的主要服务上,您可以将您的服务标记为:

[AspNetCompatibilityRequirements(
        RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

来自http://forums.silverlight.net/t/21944.aspx

【讨论】:

感谢工作。万一其他人正在使用 vb.net...语法是: 我真正需要的是使用 vb.net 语法创建 restful wcf 的一个很好的例子,但我能找到的是C# 示例,我花时间尝试转换为 vb.net。如果有人知道 vb.net 中好的示例代码,请告诉我,或者给我发链接 我花了大约 12 个小时试图追查“服务器没有提供有意义的回复;这可能是由合同不匹配、会话过早关闭或内部服务器错误引起的”,然后才发现回答,它解决了我的问题! =P 谢谢! 当我将操作系统从 Win7 切换到 Win8 时,我遇到了这个问题。即使调试项目也不起作用。 IIS8 上的某些东西使得这种配置在 WCF 服务上是必需的。谢谢史蒂夫! :) 工作就像一个魅力..也不要忘记在您的使用列表中添加 System.ServiceModel.Activation 命名空间【参考方案2】:

它会起作用的:

您已在代码中更改此行或在 web.config 中添加该行:

<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="false" multipleSiteBindingsEnabled="true" /> 
</system.serviceModel>

【讨论】:

这解决了我的问题,更改了aspNetCompatibilityEnabled="false" 这对我有用。这种方法的另一个好处是它不需要你重新编译源代码。 我更愿意更改配置文件而不是更改代码文件。【参考方案3】:

如果某人有很多服务,并且服务是使用自定义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;
    

【讨论】:

【参考方案4】:

实际上,根据最新的文档,您需要做两件事,

1.对于您的服务类别:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(Namespace = "url")]
public class Service : IService


2.对于web.config

<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>

【讨论】:

以上是关于WCF Web 服务错误:无法激活该服务,因为它不支持 ASP.NET 兼容性的主要内容,如果未能解决你的问题,请参考以下文章

无法激活服务,因为它不支持 ASP.NET 兼容性

WCF 托管在 Web 应用程序和兼容模式中

带有消息的零星 WCF 服务激活错误 - 访问 IIS 元数据库时发生错误

配置 WCF 客户端会出现错误“无法处理消息。这很可能是因为操作

无法使用 WCF 调用具有基本身份验证的 Web 服务

找不到端点异常 - WCF Web 服务