基 WebService 类还提供 System.Security.Principal.IPrincipal 类型的 User 属性,该属性可用来检索有关客户端用户的信息。此外,可以使用 ASP.NET 配置系统中的 Authorization 节授权对 Web 服务的访问。
using System.Web.Services; using System.Web.Services.Protocols; // AuthHeader class extends from SoapHeader public class AuthHeader : SoapHeader { public string Username; public string Password; } public class HeaderService : WebService { public AuthHeader sHeader; ... } |
服务中的每个 WebMethod 都可以使用 SoapHeader 自定义属性定义一组关联的标头。默认情况下,标头是必需的,但也可以定义可选标头。SoapHeader 属性指定公共字段的名称或者 Client 或 Server 类的属性(本标题中称为 Headers 属性)。在为输入标头调用方法前,WebService 设置 Headers 属性的值;而当方法为输出标头返回时,WebService 检索该值。有关输出标头或可选标头的更多信息,请参阅 .NET 框架 SDK 文档。
[WebMethod(Description="This method requires a custom soap header set by the caller")] [SoapHeader("sHeader")] public string SecureMethod() { if (sHeader == null) return "ERROR: Please supply credentials"; else return "USER: " + sHeader.Username; } |
然后,客户端在调用要求标头的方法之前,直接在代理类上设置标头,如下面的示例所示:
HeaderService h = new HeaderService(); AuthHeader myHeader = new AuthHeader(); myHeader.Username = "JohnDoe"; myHeader.Password = "password"; h.AuthHeader = myHeader; String result = h.SecureMethod(); |