mmalik15
asked on
soapheader is null in webservice
When I call my webservice and authenticate user, an authorisation token is set and I can see the token value while debugging. After the token is set when I try to call a method, the method checks for that token but the value for that token is null.
The web service client
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Data.SqlClient;
using System.Data;
using HPS.Core;
using HPS.Thesaurus.BusinessObject;
using HPS.Thesaurus.BusinessObject.Collections;
using System.Web.Script.Services;
using System.Web.Services.Protocols;
namespace TaxonomyWebService
{
/// <summary>
/// Soap Header for the Secured Web Service.
/// Username and Password are required for AuthenticateUser(),
/// and AuthenticatedToken is required for everything else.
/// </summary>
public class TaxonomyWebServiceHeader : System.Web.Services.Protocols.SoapHeader
{
public string Username;
public string Password;
public string AuthenticatedToken;
}
/// <summary>
/// Summary description for NESTaxonomyWS
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
[System.Web.Script.Services.ScriptService]
public class NESTaxonomyWS : System.Web.Services.WebService
{
public TaxonomyWebServiceHeader SoapHeader;
[WebMethod]
[SoapHeader("SoapHeader")]
public string AuthenticateUser()
{
if (SoapHeader == null)
return "Please provide a Username and Password";
if (string.IsNullOrEmpty(SoapHeader.Username) || string.IsNullOrEmpty(SoapHeader.Password))
return "Please provide a Username and Password";
// Are the credentials valid?
if (!IsUserValid(SoapHeader.Username, SoapHeader.Password))
return "Invalid Username or Password";
// Create and store the AuthenticatedToken before returning it
string token = Guid.NewGuid().ToString();
HttpRuntime.Cache.Add(token,SoapHeader.Username,null,System.Web.Caching.Cache.NoAbsoluteExpiration,TimeSpan.FromMinutes(60), System.Web.Caching.CacheItemPriority.NotRemovable,null);
return token;
}
private bool IsUserValid(string Username, string Password)
{
// TODO: Implement Authentication
return true;
}
private bool IsUserValid(TaxonomyWebServiceHeader SoapHeader)
{
if (SoapHeader == null)
return false;
return true;
// Does the token exists in our Cache?
//if (!string.IsNullOrEmpty(SoapHeader.AuthenticatedToken))
// return (HttpRuntime.Cache[SoapHeader.AuthenticatedToken] != null);
//return false;
}
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
[SoapHeader("SoapHeader")]
public List<Term> GetTopLevelTerms()
{
if (IsUserValid(SoapHeader))
{
List<Term> tl = new List<Term>();
DataTable dt = new DataTable();
string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["ThesaurusConnectionString"].ConnectionString;
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand cmd = new SqlCommand("Term_GetTopLevelTerm", connection);
cmd.CommandType = CommandType.StoredProcedure;
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);
if (dt.Rows.Count > 0)
{
int count = 0;
foreach (DataRow dr in dt.Rows)
{
tl.Add(FillData(dr));
count++;
}
}
}
return tl;
}
else
{
return null;
}
}
}
The web service client
protected void btnOk_Click(object sender, EventArgs e)
{
NESTaxonomyWSRef.NESTaxonomyWSSoapClient Obj = new NESTaxonomyWSRef.NESTaxonomyWSSoapClient();
NESTaxonomyWSRef.TaxonomyWebServiceHeader headerObj= new NESTaxonomyWSRef.TaxonomyWebServiceHeader();
headerObj.Username="hello";
headerObj.Password="user";
var v1=Obj.AuthenticateUser(headerObj);
headerObj.AuthenticatedToken = v1.ToString();
var v= Obj.GetTopLevelTerms();
}
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.