我们希望将WCF保留在配置文件中。
与此同时,如果数据将通过未加密的网络发送,我们希望代码拒绝请求。类似的事情:如果请求是没有https的basichttpbinding,则抛出异常。
服务代码有没有办法知道它是如何被调用的?
修改
从评论中看起来问题并不那么明确。
我想要做的是“修复”以下情况:我们使用basichttpBinding和https安装服务。然后管理员将其更改为不使用https。结果是数据通过网络以未加密的方式发送。
答案 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
而不是您自己的自定义主机类来欺骗它......