SOAP标头如何在ASMX Web服务中工作?

时间:2011-05-04 16:57:56

标签: asp.net web-services soap asmx

我有一个项目,它使用带有[WebMethods]和[SoapHeader(“Auth”)]的asmx文件。我没有使用SOAP的经验,也不了解它是如何工作的。

通过代码我注意到你可以使用一个与标题同名的变量,它包含数据。如何将数据发送到标头?它来自哪里?

3 个答案:

答案 0 :(得分:2)

通过使用从SoapHeader派生的类,在头中发送数据。此类将在webservice类中声明为属性。然后在您的Web方法中,您将在处理实际方法之前检查此属性中的身份验证信息。

这里可以找到一个简单的实现http://www.codeproject.com/KB/cpp/authforwebservices.aspx

以下msdn链接讲述了另一种类似的技术,它将更加复杂http://msdn.microsoft.com/en-us/library/9z52by6a.aspx

在标题中传递数据背后的基本思想仍然相同。

答案 1 :(得分:1)

数据来自SOAP信封的<soap:Header>部分中的XML。

答案 2 :(得分:0)

像平常一样为您的肥皂头创建一个类。

public class AuthHeader : SoapHeader
{
    public string CompanyID;
    public string Username;
    public string Password;
}

然后在您的普通班上得到参考。

public class MyClass : WebService
{
    public readonly AuthHeader authHeader;

    [SoapHeader("authHeader", Direction = SoapHeaderDirection.In)]
    [WebMethod(CacheDuration = 20
        , EnableSession = true
        , Description = "Find stuff now."
        , MessageName = "FindStuff")]
    [ScriptMethod(UseHttpGet = false
        , ResponseFormat = ResponseFormat.Xml
        , XmlSerializeString = true)]

    public MyResponseClass FindStuff(string searchString)
    {
        MyResponseClass myResponseClass = new MyResponseClass();
        if (authHeader.Username == "myUser" &&
            authHeader.Password == "myPass" &&
            authHeader.CompanyID == "BobsTire")
        {
            ....
            myResponseClass = ....
        }
        return myResponseClass;
    }
}