IIS中虚拟MVC应用程序的标头行为

本文关键字:应用程序 虚拟 MVC IIS | 更新日期: 2023-09-27 17:51:12

这是我目前的设置;

在IIS中,我有两个托管MVC应用程序,假设App1托管在app1.mydomain.com中。它有一个虚拟MVC 应用程序(不是目录)App2作为app1.mydomain.com/app2托管。

两个应用程序都连接到同一个WCF服务。这个WCF服务在他们的请求中需要标头,因此我为每个使用这个的调用添加了行为。

我已经正确配置了两个应用程序的头行为(App1App1MessageHeaderInspectorApp2App2MessageHeaderInspector),并在他们自己的Web.config中配置了这两个。

所以,App1使用;

<client>
  <endpoint address="http://ws.mydomain.com/Service.svc" binding="basicHttpBinding"
    bindingConfiguration="BasicHttpBinding_IWebService" contract="WCFService.IWebService"
    name="BasicHttpBinding_IWebService" behaviorConfiguration="WebServiceEndpointBehaviour" />
</client>
<extensions>
  <behaviorExtensions>
    <add name="App1MessageHeaderInspector" type="App1.App1MessageHeaderBehaviourExtension, App1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null "/>
  </behaviorExtensions>
</extensions>
<behaviors>
  <endpointBehaviors>
    <behavior name="WebServiceEndpointBehaviour">
      <App1MessageHeaderInspector />
    </behavior>
  </endpointBehaviors>
</behaviors>

App2使用相同的配置,除了App1MessageheaderInspectorApp2MessageHeaderInspector

我已经在App1中配置了路由,忽略所有到/app2的路由;

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.IgnoreRoute("{*path}", new { path = @"app2'/(.*)" });
    //...
}

并且我可以成功地查看不需要连接到WCF服务的页面(即app1.mydomain.com/app2/Home/Index返回正确的视图)。

现在我的问题是,只要我尝试连接到WCF服务与App2,我得到以下错误;

描述:在处理处理此请求所需的配置文件期间发生错误。请查看下面的具体错误细节,并适当修改您的配置文件。

解析器错误消息:类型为"App1"。app1messageheaderbehavioureextension, App1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null '注册的扩展'App1MessageHeaderInspector'无法加载。

但我不希望App2加载App1的行为!

我也尝试在App1中封装<system.web><location inheritInChildApplications="false">,但没有成功。

两个应用程序工作时,从我的本地PC测试预期。没有Windows身份验证或类似的东西。

我已经被这个话题困了好几天了。

IIS中虚拟MVC应用程序的标头行为

默认情况下,当一个web应用程序在另一个web应用程序下配置时,配置部分被继承/合并,就像你的情况一样。正如您所看到的,system.web section有其破坏继承的机制,但这只适用于system.web及其子节点(可能,甚至不是所有的子节点)。

话虽如此,我还是想试试这个(在你的App2配置中):

<extensions>
    <behaviorExtensions>
        <clear />
        <add name="App1MessageHeaderInspector" type="App1.App1MessageHeaderBehaviourExtension, App1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null "/>
    </behaviorExtensions>
</extensions>

在app2的虚拟目录下的bin目录中是否有App1.dll ?该消息表明在通常的位置(如/bin)

中找不到dll。