Попытка переопределить SoapHeaderAttribute, чтобы добавить Аутентификацию к атрибуту - PullRequest
1 голос
/ 03 января 2012

Я использую устаревшие веб-сервисы .net 2.0 .asmx (пытался убедить их перейти на WCF, но безуспешно).Я пытаюсь найти способ не только использовать собственный заголовок SOAP, но и аутентифицировать пользователя, не имея кода аутентификации в каждой ссылке.

В настоящее время мой веб-сервис выглядит следующим образом:

    public WebserviceAuthentication currentUser;

    [WebMethod(Description="Returns the logged in users credentials")]
    [SoapHeader("currentUser")]
    public string HelloWorld()
    {
        var user = AuthenticateUser(currentUser, WebServiceResources.MEDICAREELIGIBILITY_HELLOWORLD);
        return string.Format("{0} {1} {2}", user.User.UserName, user.User.ProviderUserKey, user.AccountId);
    }

В идеале я бы изменил код следующим образом:

    public WebserviceAuthentication currentUser;
    public CustomAuthentication user;

    [WebMethod(Description="Returns the logged in users credentials")]
    [SoapHeaderAuthentication("currentUser")]
    public string HelloWorld()
    {
        return string.Format("{0} {1} {2}", user.User.UserName, user.User.ProviderUserKey, user.AccountId);
    }

SoapHeaderAuthentication прочитает currentUser и подтвердит, что информация является зарегистрированным пользователем.если они есть, вернуть пользовательский объект пользователя и заполнить объект пользователя.Затем я мог бы получить доступ к объекту пользователя из WebService.

Проблема в том, что я не могу расширить SoapHeaderAttribute, потому что это запечатанный класс.

Ответы [ 2 ]

1 голос
/ 04 января 2012

Это немного вернется, но я написал статью, которую вы могли бы расширить: здесь

0 голосов
/ 04 января 2012

См. SoapExtension класс , чтобы узнать о единственном механизме расширения в веб-сервисах ASMX, который позволит вам контролировать каждый запрос (или ответ).

...