从网上找到了类关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;
}
}
//创建类 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;
}
}
namespace Doom.WebService
{
public class CredentialSoapHeader
{}
}
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";
}
}