我在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>
答案 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应用程序继承该配置。配置架构不向后兼容。