我正在使用传统的.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,因为它是一个密封的类。