Указание имени приложения для аутентификации WCF - PullRequest
0 голосов
/ 23 июня 2011

Я думаю разместить одну и ту же службу для нескольких клиентов в соответствующих виртуальных каталогах в IIS.так что в основном на диске будет один сервис, на который будут ссылаться несколько виртуальных каталогов, размещенных в IIS, это даст мне что-то вроде этого:

http://myservice/client1

http://myservice/client2

... и т. Д.

Я сделаю договор на обслуживание обобщенным.это даст мне один контракт для всех клиентов.

Базовая база данных будет отличаться для всех клиентов (схема одна и та же), я подключусь к соответствующей базе данных клиентов, выяснив из URL-адреса, используемого для доступа к службе, если это было http://myservice/client1 я подключусь к dbClient1, если это было http://myservice/client2 я подключусь к dbClient2 ... и т. д.

ВЫЗОВ:

вышеуказанное решит большинство проблем, кроме процесса аутентификации (я использую ASP Membership, формы аутентификации).мой сервис находится на привязке https basicHttp, поэтому у меня нет сеансов.

Как указать, какое имя приложения использовать для аутентификации пользователя.(все клиенты имеют отдельные имена приложений, хранящиеся в ОДНОЙ базе данных членства ASP). Если я перехожу на Global.asax в Application_AuthenticateRequest, это работает, так как я могу получить URL-адрес в то время и указать имя приложения, которое будет использоваться при аутентификации,но это также меняет имя приложения для других абонентов ... что совсем нехорошо ....

Так что все, что мне нужно, это какой-то способ сообщить моей службе, что искать это имя пользователя / пароль в этом приложениив этой базе данных.(база данных будет одинаковой для всех клиентов в случае аутентификации).Но я хочу изменить имя приложения для этого конкретного сеанса / экземпляра ... (не уверен, что эти два доступны в привязке https basicHttp)

, если я смогу решить этот вопрос, у меня все будет хорошо ....

пожалуйста, помогите ... спасибо

1 Ответ

0 голосов
/ 23 июня 2011

Похоже, что вы используете инфраструктуру 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;
      }
    }
}
...