2012-01-03 2 views
1

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

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

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, потому что это закрытый класс.

+0

Можно ли использовать WSE? –

+0

Возможно. У вас есть пример? – Cyfer13

+0

Не совсем. Я просто знаю, что смог получить намного больше контроля над заголовком с WSE в недавней реализации. –

ответ

1

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

+0

Итак, я объединил то, что вы написали, и что перечислено в этой статье: http://www.codeguru.com/columns/experts/article.php/c5479. До сих пор у меня работа разрешена, но у меня нет доступа к объекту CustomAuthentication из моего веб-сервиса. Также, пытаясь понять, как передать значение из моего атрибута методу расширения. – Cyfer13

+0

Хорошо. Итак, теперь у меня есть атрибут, передающий параметр, но до сих пор не могу понять, как получить доступ к объекту CustomAuthentication из веб-службы. Любая помощь будет назначена. – Cyfer13

0

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

Смежные вопросы