簡體   English   中英

SOAP標頭身份驗證不起作用?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM