C# 启用或禁用某些IP访问我的WCF服务

C# 启用或禁用某些IP访问我的WCF服务,c#,web-services,wcf,C#,Web Services,Wcf,我正在寻找一种方法来启用或禁用某些IP访问和添加我的WCF服务作为服务引用 目前可以公开添加我们的Web服务,如何添加IP筛选器? 或者我可以使用其他设置吗 我已经了解了如何将添加到web.config,但是代码中的关键部分丢失了,因此无法使用 注;Web服务是一个更大项目的一部分,不能作为单独的项目分开,可以通过HTTPS(一个网站)获得。由于我认为在WCF中没有自动完成的方法,您有两个主要选择: 如果您想要安全的东西,不想实现任何东西,但您的环境使用防火墙,您可以配置防火墙以拒绝来自特定IP

我正在寻找一种方法来启用或禁用某些IP访问和添加我的WCF服务作为服务引用

目前可以公开添加我们的Web服务,如何添加IP筛选器? 或者我可以使用其他设置吗

我已经了解了如何将
添加到web.config,但是代码中的关键部分丢失了,因此无法使用


注;Web服务是一个更大项目的一部分,不能作为单独的项目分开,可以通过HTTPS(一个网站)获得。

由于我认为在WCF中没有自动完成的方法,您有两个主要选择:

  • 如果您想要安全的东西,不想实现任何东西,但您的环境使用防火墙,您可以配置防火墙以拒绝来自特定IP地址的连接
  • 否则,您可以实现您提到的文章中提到的IP筛选器(即,作为serviceBeharvior,此处未描述),或者更简单地实现为由所有公共webservice方法调用的单个私有方法,如果不允许客户端的IP(基于文件或数据库中IP的白名单或黑名单),则会抛出错误代码


  • 如果您的Web服务托管在IIS中,则可以在其中限制IP地址:


    我已编辑了您的标题。请看,“,其中的共识是“不,他们不应该”。最好的方法应该是硬件防火墙,而不是你的软件应用程序!注;Web服务是更大项目的一部分,不能作为单个项目分开--更大的项目对每个人都有用。那么,您是否限制访问整个服务?或者只是服务上的操作?有多种服务吗?您是否可以控制将服务部署到web服务器?WCF服务是webforms中网站项目的一部分。我无法将WCF服务从项目中分离出来,因为这意味着要重写成千上万行代码。是的,如果这是你的问题,我可以访问IIS。好的。为了实现IP限制,不需要将WCF服务与项目分离。我想了解的是,你希望这些限制如何发挥作用。您想限制对每个人或一群人的访问吗?您说过“WCF服务是webforms中网站项目的一部分”。答案是确保将服务部署到web站点项目的单独文件夹中的IIS。如果它位于单独的文件夹中,您可以应用上述限制,而不影响任何人对网站的访问。
    /// <summary>
    /// Get the client IP address.
    /// </summary>
    private string GetClientIpAddress()
    {
        string result = string.Empty;
        try
        {
            OperationContext context = OperationContext.Current;
            MessageProperties messageProperties = context.IncomingMessageProperties;
            RemoteEndpointMessageProperty endpointProperty = messageProperties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
            result = endpointProperty.Address;
        }
        catch (Exception ex)
        {
            logger.Error(ex);
        }
    
        return result;
    }
    
    /// <summary>
    /// Returns <code>true</code> if the current IP address is allowed
    /// to access the webservice method, <code>false</code> otherwise.
    /// </summary>
    private bool CheckIPAccessRestriction()
    {
        bool result = false;
        List<string> allowed = GetAllowedIpAddressesList();
        if (allowed.Count() == 0)
        {
            result = true;
        }
        else
        {
            var ip = GetClientIpAddress();
            result = allowed.Contains(ip);
        }
    
        return result;
    }