禁用元数据交换而不使用web.config

本文关键字:web config 元数据 交换 | 更新日期: 2023-09-27 18:03:33

我正在开发一个将部署在客户端数据中心的单租户web应用程序,出于安全原因,我们希望禁用应用程序WCF服务上的元数据交换。是否有可能在我们的服务应用程序或web.config之外的其他机制中以编程方式做到这一点?我们想要阻止更多有技术头脑的客户上网。配置并打开元数据交换

禁用元数据交换而不使用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配置。