2009-11-11 72 views
3

我是WCF的新手。假设我有两个asp.net应用程序,一个使用Windows身份验证(Intranet应用程序),另一个使用表单身份验证(Internet应用程序)。我希望这两个应用程序都有一个服务引用,这个服务引用是一个物理上独立的机器,我所有的业务逻辑都将存在(在WCF中)。所以,应用程序是这样的:用ASP.NET和WCF跨层传递用户身份

浏览器 - > ASP.NET - > WCF。当呼叫在WCF层中结束时,我需要知道ASP.net获取的用户名(User.Identity.Name)。

使用.NET Remoting,我创建了一个自定义主体,并将其存储在LogicalCallContext中。然后,使用远程服务器端的自定义远程接收器,将当前线程主体设置为LogicalCallContext中的主体。

用WCF做这种事情的正确方法是什么?同样,我的WCF服务只能由运行ASP.NET的服务帐户调用,但我需要知道这个调用最终代表谁。

回答

2

您的WCF服务是否对ASP.NET应用程序进行身份验证和信任(例如,使用Windows身份验证来验证ASP.NET应用程序在哪个服务帐户下运行)。

如果是这样,您可以考虑在自定义SOAP头中传递有关最终调用者的信息。

您可以使用自定义WCF行为来隐藏应用程序代码中的血腥细节,该行为具有在客户端添加SOAP标头的ClientMessageInspector以及在服务器端处理SOAP标头的DispatchMessageInspector。

+1

是的,确切地说。我会信任ASP.NET服务帐户。自定义标题。好的,这是我考虑过的一种方法,但认为可能有更“标准”的WCF做事方式。谢谢。 – aquinas 2009-11-11 20:56:43

+0

我不认为有一个标准的方式 - 至少我在StackOverflow上问这个问题,并没有得到任何回应:http://stackoverflow.com/questions/774026/soap-header-with-identity-of- final -客户 – Joe 2009-11-12 06:36:43