IIS中虚拟MVC应用程序的标头行为
本文关键字:应用程序 虚拟 MVC IIS | 更新日期: 2023-09-27 17:51:12
这是我目前的设置;
在IIS中,我有两个托管MVC应用程序,假设App1
托管在app1.mydomain.com
中。它有一个虚拟MVC 应用程序(不是目录)App2
作为app1.mydomain.com/app2
托管。
两个应用程序都连接到同一个WCF服务。这个WCF服务在他们的请求中需要标头,因此我为每个使用这个的调用添加了行为。
我已经正确配置了两个应用程序的头行为(App1
有App1MessageHeaderInspector
和App2
有App2MessageHeaderInspector
),并在他们自己的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
使用相同的配置,除了App1MessageheaderInspector
是App2MessageHeaderInspector
。
我已经在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身份验证或类似的东西。
我已经被这个话题困了好几天了。默认情况下,当一个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)