我有一个项目,它使用带有[WebMethods]和[SoapHeader(“Auth”)]的asmx文件。我没有使用SOAP的经验,也不了解它是如何工作的。
通过代码我注意到你可以使用一个与标题同名的变量,它包含数据。如何将数据发送到标头?它来自哪里?
答案 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;
}
}