我脑子里有一些想法,我想把它们放在适当的架子上,但是在一般的方法中,能够在将来传播我的知识。
因此,假设我正在运行包含两个方法的WCF服务:一个将一些对象的列表发送到客户端(当客户端要求时),另一个根据客户端的操作更改对象的状态。通过WCF发送的那些对象存储在服务端的独立存储中。
现在,让我分组我的问题:
1)首先,我想知道如果许多客户将我的服务添加为服务引用会发生什么。由于此服务使用隔离存储(假设我正在使用存储进行组装),如果许多客户想要同时更改数据会发生什么?我的意思是,隔离存储如何在这里工作,它是否为每个客户端生成不同的文件(这意味着它对许多用户来说是安全的,因为他们每个人都在操纵不同的文件)?因为如果它存储在服务器端,那么我认为它是每个人的一个文件..或者我可以自己决定配置孤立存储还是服务器本身?如果是,怎么样?
2)假设这个文件对于每个客户端都是通用的。然后我必须提供一些锁定/解锁逻辑。关于WCF,这有什么特别之处吗?你能提供关于此事的任何好文章吗?
答案 0 :(得分:1)
使用隔离存储文件由用户和程序集分隔,因此在您的情况下,除非您使用模拟,否则它为IUSR_machine
。所以你需要实现文件锁定/解锁。为什么不能将SQL数据库用作存储?
<强>更新强>
模拟基本上允许您的进程在与拥有该线程的进程不同的安全上下文中运行。来自https://msdn.microsoft.com/en-us/library/ms730088(v=vs.110).aspx
通常,客户端调用服务以使服务执行某些操作 代表客户采取行动。模仿允许服务行动 作为客户在执行操作时。
另见http://blogs.msdn.com/b/saurabs/archive/2012/07/16/wcf-learning-impersonation.aspx
你基本上把这样的东西放到你的配置文件中:
<serviceAuthorization impersonateCallerForAllOperations="true" />