为WCF身份验证指定应用程序名称

时间:2011-06-23 09:20:21

标签: c# asp.net wcf .net-3.5

我正在考虑在IIS中的各个虚拟目录上为多个客户端托管相同的服务。所以基本上会有一个服务在磁盘上,将由多个IIS托管的虚拟目录引用,这将给我一些这样的事情:

http://myservice/client1

http://myservice/client2

...等

我将使服务合同一概而论。这将给我一份所有客户的合同。

底层数据库对于所有客户端都是不同的(架构是相同的),我将通过从用于访问服务的URL中找出来连接到客户端各自的数据库,如果它是http://myservice/client1我将连接到dbClient1,如果它是http://myservice/client2我将连接到dbClient2 ... etc

挑战:

以上将解决大多数问题,除了身份验证过程(我使用的是ASP Membership,表单身份验证)。我的服务是https basicHttp绑定,所以我没有会话。

如何指定用于用户身份验证的应用程序名称。 (所有客户端都有单独的应用程序名称,存储在一个ASP成员资格数据库中)如果我在Application_AuthenticateRequest下更改Global.asax,它确实有效,因为我可以在那时获取URL,并指定在身份验证时使用的应用程序名称,但这也改变了其他来电者的应用名称...这根本不好......

所以我需要的是告诉我的服务在该数据库中的此应用程序下查找此用户名/密码的一些方法。 (在身份验证情况下,所有客户端的数据库都是相同的)。但我希望更改该特定会话/实例的应用程序名称...(不确定这两个是否在https basicHttp绑定中可用)

如果我能解决这个问题我会很好......

请帮忙......谢谢

1 个答案:

答案 0 :(得分:0)

您似乎使用ASP.NET基础结构进行身份验证。你使用什么样的MemberShipProvider?您需要编写一个自定义提供程序,使用当前请求URL来确定应用程序名称。例如,这是基于SqlMembershipProvider

的那个
public class MyMembershipProvider : SqlMembershipProvider
{

    public override string ApplicationName 
    { 
      get
      {
          var url = HttpContext.Current.Request.Url;
          // find out the application name from  url
      }
      set
      {
         base.ApplicationName = value;
      }
    }
}