3

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

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

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

我尝试将我的system.websystem.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,Version=3.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”加载类型“System.ServiceModel.Activation.HttpHandler”。

在 IIS 中,我的应用程序设置为 .Net 4.0。我没有看到直接在应用程序池上指定框架的方法(它只有回收、性能、健康、身份选项卡)。

我需要做的就是在 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>
4

2 回答 2

1

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

于 2012-09-05T16:50:05.723 回答
0

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

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

于 2012-09-05T16:56:00.753 回答