在代码中限制WCF配置

时间:2010-02-03 22:48:20

标签: wcf security

我们希望将WCF保留在配置文件中。

与此同时,如果数据将通过未加密的网络发送,我们希望代码拒绝请求。类似的事情:如果请求是没有https的basichttpbinding,则抛出异常。

服务代码有没有办法知道它是如何被调用的?

修改

从评论中看起来问题并不那么明确。

我想要做的是“修复”以下情况:我们使用basichttpBinding和https安装服务。然后管理员将其更改为不使用https。结果是数据通过网络以未加密的方式发送。

3 个答案:

答案 0 :(得分:3)

我不确定我理解你想要什么......你是在谈论在服务本身上验证它是如何被调用的,如果它们不符合某些标准就拒绝一些请求?

我确信可以做到(至少某些事情,比如检查SSL或多或少),但首先我会问为什么,如果你只想通过安全绑定调用你的服务,为什么你首先使用不安全的服务暴露服务。确保服务配置正确不是更有意义吗?

答案 1 :(得分:1)

我没有给你一个例子,但请记住,你可以通过WCF配置做任何事情,你可以在代码中做。您甚至不需要拥有配置文件。

答案 2 :(得分:1)

你是自托管吗?最简单的方法是:

ServiceHost serviceHost = new ServiceHost(typeof(Service1), "http://localhost:1234/MyService/xml");

foreach (ServiceEndpoint sep in serviceHost.Description.Endpoints)
{
    if(sep.Binding.Scheme != "https")
    {
       // either just remove that endpoint, or signal an error
    }
}

当然,当您在IIS中托管时,这会变得有点棘手......您可能必须创建自己的自定义ServiceHost后代来进行此检查,并确保使用基于IIS的* .svc文件那个自定义主机。当然,聪明的管理员可能会通过使用基础ServiceHost而不是您自己的自定义主机类来欺骗它......