从网上找到了类关SoapHeader的资料,我按那方法创建了以下代码。但我在客户端Doom.WebService.点不出CredentialSoapHeader这个类,不知道是什么原因,还望各位指点迷律,谢谢!!!
//创建类 CredentialSoapHeader.cs
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
 
///<summary>
/// CredentialSoapHeader 的摘要说明
///</summary>
public class CredentialSoapHeader : System.Web.Services.Protocols.SoapHeader 
{
    private string _userName;
    private string _userPassword; 
    
    public CredentialSoapHeader()
     {
         //
         // TODO: 在此处添加构造函数逻辑
         //
     }
 
    public string UserName
    {
        get { return _userName; }
        set { _userName = value; }
    }
 
    public string UserPassword
    {
        get { return _userPassword; }
        set { _userPassword = value; }
    }
}
 
 
//创建WebService Web服务
using System;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
 
 
///<summary>
/// WebService 的摘要说明
///</summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class WebService : System.Web.Services.WebService {
 
    private CredentialSoapHeader m_credentials;
    public CredentialSoapHeader Credentails
    {
        get { return m_credentials; }
        set { m_credentials = value; }
    } 
 
    public WebService () {
 
        //如果使用设计的组件,请取消注释以下行 
        //InitializeComponent(); 
    }
 
    [WebMethod]
    [SoapHeader("Credentails")] 
 
    public string HelloWorld() 
    {
        this.VerifyCredential(this); 
        
        return "Hello World";
    }
 
     //验证是否合法 
    private void VerifyCredential(WebService s) 
    {
        if (s.Credentails == null || s.Credentails.UserName == null || s.Credentails.UserPassword == null)
        {
            throw new SoapException("验证失败", SoapException.ClientFaultCode, "Security");
        }
        else
        {
            if (s.Credentails.UserName != "test" || s.Credentails.UserPassword != "test")
            {
 
                throw new SoapException("用户和密码错误", SoapException.ClientFaultCode, "Security");
            }        
        }    
    }     
}然后在客户端按资料代码创建:
//客户端的代码:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Doom.WebService;  //假设客户端命令空间为Doom 我Web服务引用WebService.asmx为WebService
public partial class Default3 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
 
    }
 
 
    protected void Button1_Click(object sender, EventArgs e)
    {
        localhost.WebService s = new localhost.WebService();
        this.InitWebServiceProxy(s);
        string temp = s.HelloWorld(); 
 
    }
 
    private void InitWebServiceProxy(Doom.WebService.WebService s)
    {
        Doom.WebService.CredentialSoapHeader soapHeader = new Doom.WebService.CredentialSoapHeader();
        /*#######问题就出在上面这句,我Doom.WebService.点不出CredentialSoapHeader这个类,不知道是什么原因,还望各位指点迷律,谢谢!!##########*/
        soapHeader.UserName = "test";
        soapHeader.UserPassword = "test";
        s.CredentialSoapHeaderValue = soapHeader;       
    }  
}

解决方案 »

  1.   

    需要加上命名空间
    namespace Doom.WebService
    {
     public class CredentialSoapHeader 
    {}
    }
      

  2.   

    //客户端的代码:
    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    //假设客户端命令空间为Doom 我Web服务引用WebService.asmx为WebService
    public partial class Default3 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {    }
        protected void Button1_Click(object sender, EventArgs e)
        {
            WebService s = new WebService();
            this.InitWebServiceProxy(s);
            string temp = s.HelloWorld();    }    private void InitWebServiceProxy(WebService s)
        {
            CredentialSoapHeader soapHeader = new CredentialSoapHeader();
            /*#######问题就出在上面这句,我Doom.WebService.点不出CredentialSoapHeader这个类,不知道是什么原因,还望各位指点迷律,谢谢!!##########*/
            soapHeader.UserName = "test";
            soapHeader.UserPassword = "test";
          
        }
    }
      

  3.   

    文件放到  App_Code 下