WCF:异步调用更安全吗?

时间:2010-07-13 09:30:32

标签: wcf security

在我正在工作的项目中,我们正在使用WCF。 公司政策迫使我们使用异步调用,原因应该是安全性。 我已经问过为什么这样安全得多,但我得不到明确的答案。

有人可以解释为什么这么安全吗?

5 个答案:

答案 0 :(得分:3)

他们不是。无论呼叫是阻塞还是获得响应,或者使用回调,都会应用相同的安全(身份验证,加密)机制和注意事项。

有人可能会混淆认为异步调用更“安全/安全”的唯一方法是,他们认为未处理的WCF异常如果它们是异步的,则不会导致主线程失效,因为它们将在回调中被引发。

在这种情况下,在接近本政策的所有者时,我会建议极为谨慎,以避免限制职业的后果。有些人可以在情感上依赖他们的政策。

答案 1 :(得分:2)

没有必要为什么异步呼叫比同步呼叫更安全。我认为你应该与政策的所有者讨论相同的问题。

答案 2 :(得分:2)

不,它们不比同步呼叫更安全或更不安全。唯一的区别是客户端等待同步调用的响应,而在异步时,通知响应。

它们是否来自同步呼叫使连接打开的时间更长或某种程度?

答案 3 :(得分:2)

我同意其他答案 - 绝对不是更安全。

启动Fiddler并观看同步请求与异步请求。您基本上会看到相同类型的流量(尽管同步可能会发送和接收更多数据,因为它可能是一个回发)。但是你可以截取这两个请求,操纵它们,然后重新发送它们并对你的服务器造成严重破坏。

顺便提一下,提琴手是一个很棒的工具。在发送给服务器的数据类型和数据方面,它令人大开眼界。

答案 4 :(得分:2)

使用异步签名(BeginBlah / EndBlah)公开WCF操作实际上根本不会影响公开的操作。当您查看元数据时,会执行类似

的操作
[OperationContract(AsyncPattern=true)]
IAsyncResult BeginSomething(AsyncCallback, object)

void EndSomething(IAsyncResult)

......实际上最终还是被称为“Something”的操作。实际上这是关于WCF的一个好处:客户端和服务器在是否选择同步实现/使用操作方面可能有所不同。

因此,如果您正在使用生成WCF代理(例如通过添加服务引用),那么您将获得每个操作的同步版本是否实现异步,除非您勾选小复选框以生成异步重载。当你这样做的时候,就会获得可能只在服务器上同步声明的异步操作版本。

所有WCF正在客户端和服务器上进行操作,让您可以选择线程模型:您希望WCF等待结果,还是要告知它您已完成。实际的传输连接是如何管理的 - 据我所知 - 完全不受影响。例如:对于NetTcpBinding,套接字在调用期间仍然保持打开状态。

因此,为了达到这一点,我真的很难想象这可能如何对WCF服务的安全包络产生任何影响。如果服务是使用异步模式公开的,并且是以异步方式真正实现的(对于出站IO的异步,或者队列通过线程池工作等),那么可能存在一个论点,即DOS服务将更难(通过耗尽了WCF IO线程池),但那就是它。

请参阅Syncronous and Asyncronous Operations in MSDN

注意:如果您共享客户端和服务器之间的合同接口,那么两端的同步性显然是匹配的(因为它们都使用相同的接口类型),但这只是一个限制使用共享接口。如果你创建了另一个 equivilent 接口,只有异步模式不同,你仍然可以很好地创建一个ChannelFactory。