[英]Unable to send soap request with digest authentication in the header
[英]SOAP Header Authentication not working?
我正在使用SOAP標頭,並且需要從數據庫進行身份驗證。 因此,我嘗試創建一個Class並使用一種方法,當我們傳遞用戶名和密碼時,它將返回其是否存在於數據庫中。
----- My Main Class ---
[WebMethod, SoapHeader("AuthenticateUser")]
public System.Xml.XmlElement CancelUSer(string _UserID, string _Remarks)
{
if (UsersAuth.ValidateUser(AuthenticateUser.UserName, AuthenticateUser.Password) > 0)
{
//METHODS
}
}
public class UserAuthenticateHeader : SoapHeader
{
public string UserName;
public string Password;
}
public class UsersAuth
{
static OracleConnection con;
public UsersAuth()
{
con = new OracleConnection(WebConfigurationManager.ConnectionStrings["conString"].ToString());
}
public static int ValidateUser(string _UserName, string _Password)
{
int Result = 0;
using (OracleCommand cmd = new OracleCommand("SELECT COUNT(*) FROM USES WHERE UID=:UID AND PASSWORD=:PASSWORD", con)) {
cmd.Parameters.AddWithValue(":UID", _UserName);
cmd.Parameters.AddWithValue(":PASSWORD", _Password);
con.Open();
Result = Convert.ToInt32(cmd.ExecuteScalar());
con.Close();
}
return Result;
}
}
現在,當我從程序中調用它時,將其ObjectReferenceNotSet拋出給對象的實例。 我已經為應用程序中的方法設置了用戶名,密碼和Headervalue。 但是它沒有點擊“ ValidateUser ”方法。
有什么方法可以實現這一目標?
我解決了 由於該方法是靜態的,因此它沒有調用OracleConnection。 我將OracleConnection聲明更改為Method。 現在可以正常工作了。
由於該方法是靜態的,因此我們不需要創建類的對象。 沒有對象,構造函數將不會被調用。 那就是問題所在。
只要構造函數是靜態的,就可以將連接對象實例化保留在構造函數中。 即
public static UsersAuth()
{
con = new OracleConnection(WebConfigurationManager.ConnectionStrings["conString"].ToString());
}
這樣的好處是僅創建一個連接,而不為每個方法調用都創建一個新的連接。 您需要考慮是否需要重新使用連接,如果需要,是否以及何時關閉連接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.