禁用元数据交换而不使用web.config
本文关键字:web config 元数据 交换 | 更新日期: 2023-09-27 18:03:33
我正在开发一个将部署在客户端数据中心的单租户web应用程序,出于安全原因,我们希望禁用应用程序WCF服务上的元数据交换。是否有可能在我们的服务应用程序或web.config之外的其他机制中以编程方式做到这一点?我们想要阻止更多有技术头脑的客户上网。配置并打开元数据交换
您可以通过将HttpGetEnabled/HttpGetEnabled设置为false来禁用元数据交换。
First,从ServiceHost创建一个派生主机
public class DerivedHost : ServiceHost
{
public DerivedHost( Type t, params Uri baseAddresses ) :
base( t, baseAddresses )
{
DisableMetadataExchange();
}
private void DisableMetadataExchange()
{
var metadata = Description.Behaviors.Find<ServiceMetadataBehavior>();
if metadata != null)
{
// This code will disable metadata exchange
metadata .HttpGetEnabled = false;
metadata .HttpsGetEnabled = false;
}
}
}
第二个,从ServiceHostFactory创建一个派生工厂
public class DerivedFactory : ServiceHostFactory
{
public override ServiceHost CreateServiceHost( Type t, Uri[] baseAddresses )
{
return new DerivedHost( t, baseAddresses );
}
}
第三个,创建或编辑您的svc文件标记并应用派生的工厂。
<% @ServiceHost Factory=”DerivedFactory” Service=”MyService” %>
第四个,在浏览器中测试你的服务,你应该看到一个消息包含"此服务的元数据发布当前被禁用"。
如果想了解更多关于这个实现的细节,请访问这个链接。
是。如果您将WCF服务编码为"自描述",这基本上意味着使用WCF拦截层来处理到端点的所有传入请求,那么您可以从MEX请求返回null。
要使这个工作有点棘手,但在我的经验导致一个更干净的实现比所有那些大量的web。配置条目。这里描述的是没有配置文件的WCF配置。