无法阻止web.config继承

时间:2012-09-05 16:46:33

标签: asp.net wcf iis configuration endpoint

我在IIS中的网站中创建了一个应用程序。

我的应用程序用于托管运行.Net 4.0代码的WCF服务端点(在其中创建的网站,运行.Net 2.0)

当我加载此服务端点时,我收到模型和处理程序丢失的错误(因为root网站在web.config中定义了它们)。

我尝试在以下指令中包装 system.web 以及 system.serviceModel

  <location path="." inheritInChildApplications="false">
    <system.web>
    ...
  </location>

但处理程序和模块继续尝试加载。

接下来,我尝试清除模块和处理程序。

<httpModules>
  <clear />
</httpModules>
<httpHandlers>
  <clear />
</httpHandlers>

导致以下错误:

  

找不到请求类型'GET'

的http处理程序

接下来我尝试手动添加.svc

所需的处理程序
     <add 
       verb="*"
       path="*.svc"
       type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />

这导致:

  

无法从中加载类型'System.ServiceModel.Activation.HttpHandler'   assembly'System.ServiceModel,Version = 3.0.0.0,Culture = neutral,   公钥= b77a5c561934e089' 。

在IIS中,我的应用程序设置为.Net 4.0。我没有看到直接在应用程序池上指定框架的方法(它只有Recycling,Performance,Health,Identity选项卡)。

我需要做的就是在2.0网站中添加运行.net 4.0的虚拟目录/应用程序,并托管WCF端点。

我的4.0应用程序在单独的应用程序池下运行。

添加整个web.config

<?xml version="1.0"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.web>
      <compilation debug="true" />
      <authentication mode="Windows" />
      <httpModules>
        <clear />
      </httpModules>
      <httpHandlers>
        <clear />
        <add verb="*" path="*.svc"
          type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      </httpHandlers>
    </system.web>
    <system.serviceModel>
      <bindings>
        <!--<basicHttpBinding>
        <binding name="extAcctCustMapBinding" maxBufferSize="1000000"
          maxReceivedMessageSize="1000000" />
      </basicHttpBinding>-->
      </bindings>

      <behaviors>
        <serviceBehaviors>
          <behavior name="DebugBehavior">
            <serviceMetadata httpGetEnabled="true" />
            <serviceDebug includeExceptionDetailInFaults="true" />
          </behavior>
        </serviceBehaviors>
      </behaviors>

      <services>
        <service behaviorConfiguration="DebugBehavior" name="MyService">
          <endpoint binding="basicHttpBinding" name="MyService"
            contract="IMyService" />
        </service>
      </services>

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

    <system.webServer>
      <modules runAllManagedModulesForAllRequests="false"/>
    </system.webServer>
  </location>
</configuration>

2 个答案:

答案 0 :(得分:1)

您不能在.NET 2.0应用程序中将.NET 4.0作为嵌套应用程序运行。

答案 1 :(得分:0)

.NET框架版本是在应用程序级别定义的。您可以将一个网站(www.example.com)作为.NET 2.0应用程序运行,然后将一个虚拟目录(即主站点下的单独应用程序)设置为.NET 4.0应用程序。应用程序池不能共享不同的.NET版本,因此每个应用程序都需要一个单独的应用程序池,但这与站点配置无关。

话虽如此,如果您将主站点配置为.NET 2.0应用程序并将虚拟目录配置为.NET 4.0应用程序,则.NET 4.0应用程序无法从.NET 2.0应用程序继承该配置。配置架构不向后兼容。