Search code examples
c#web-servicessoapasmxasp.net-4.0

The header property/field must be of type SoapHeader or a derived type, or an array of SoapHeader or SoapUnknownHeader


using System.Data;
using System.Web.Services;
using System.Web.Services.Protocols;


namespace MyServices
{
    /// <summary>
    /// Summary description for Enroll
    /// </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 Enroll : WebService
    {
        public Credentials Credentials = new Credentials();

        [WebMethod(Description = "This method call will insert a public note with the given comments", EnableSession = false)]
        [SoapHeader("Credentials")]
        public bool ActivityInsert(int docId, string activityType, string comments, string userNameOn247, string userNameEt)
        {
            return EnrollBl.ActivityInsertBl(docId, activityType, ref comments, userNameOn247, userNameEt, this.Credentials);
        }

        [WebMethod(Description = "This method call will insert the enrollment document into the database and return the relevant document id.", EnableSession = false)]
        [SoapHeader("Credentials")]
        public EnrollResponse EnrollmentInsert(Enrollment enrollmentRequest)
        {
            return EnrollBl.EnrollmentInsertBl(enrollmentRequest, this.Credentials);
        }

        [WebMethod(Description = "This method call will retrieve the pdf file based on document id", EnableSession = false)]
        [SoapHeader("Credentials")]
        public object EnrollmentFile(int documentId)
        {
            return EnrollBl.EnrollmentFileBl(documentId, this.Credentials);
        }

        [WebMethod(Description = "This method call will update the enrollment document status from Ready to Approved and also insert a public note with the given comments", EnableSession = false)]
        [SoapHeader("Credentials")]
        public bool EnrollmentUpdate(int docId, string activityType, string comments, string userNameEt, string userNameOn247)
        {
            return EnrollBl.EnrollmentUpdateBl(docId, activityType, ref comments, userNameOn247, userNameEt, this.Credentials);
        }

        [WebMethod(Description = "This method call will retrieve the history details for the given document id", EnableSession = false)]
        [SoapHeader("Credentials")]
        public DataTable EnrollmentHistory(int documentId)
        {
            return EnrollBl.EnrollmentHistoryBl(documentId, this.Credentials);
        }

        [WebMethod(Description = "This method call will retrieve all the documents that match the search criteria", EnableSession = false)]
        [SoapHeader("Credentials")]
        public DataTable EnrollmentSearch(SearchEnrollment searchParams)
        {
            return EnrollBl.EnrollmentSearchBl(searchParams, this.Credentials);
        }

        [WebMethod(Description = "This method call retrieves all the active form types as dataset", EnableSession = false)]
        [SoapHeader("Credentials")]
        public DataSet FormList()
        {
            return EnrollBl.FormListBl(this.Credentials);
        }

        [WebMethod(Description = "This method call retrieves all document statuses as dataset", EnableSession = false)]
        [SoapHeader("Credentials")]
        public DataSet StatusList()
        {
            return EnrollBl.StatusListBl(this.Credentials);
        }
    }
}

I created the above Webservice and i added soap header attribute to the service i am getting the below error

The header property/field Enroll.Credentials must be of type SoapHeader or a derived type, or an array of SoapHeader or SoapUnknownHeader.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Exception: The header property/field Enroll.Credentials must be of type SoapHeader or a derived type, or an array of SoapHeader or SoapUnknownHeader.


Solution

  • I Inherit the SOAP Header class properties to the Credentials class then the web service is working properly.