Link to home
Start Free TrialLog in
Avatar of mmalik15
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.

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;

            }
        }
        }

Open in new window


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();

       
        
    }

Open in new window

ASKER CERTIFIED SOLUTION
Avatar of Rose Babu
Rose Babu
Flag of India image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial