Заголовок веб-службы SOAP - PullRequest
       12

Заголовок веб-службы SOAP

0 голосов
/ 01 ноября 2018

Я пытаюсь изучить веб-сервисы и создал простой. Теперь я хочу защитить его аутентификацией. Я узнал, что люди достигают этого с помощью получения класса из SoapHeader. Я добился этого, но теперь моему веб-методу требуется еще один параметр. Я думаю, что сделал что-то не так, потому что в других примерах люди не публикуют свои значения аутентификации в качестве параметра.

Вот мой код веб-сервиса.

    public class AuthUser : SoapHeader
    {
        public string Uname;
        public string Pwd;
    }
    public AuthUser au;

    string cs = ConfigurationManager.ConnectionStrings["ModelCCM"].ConnectionString;
    [WebMethod]
    [SoapHeader("au", Direction = SoapHeaderDirection.In)]
    public string InsertCustomer(string Name, string Phone, string City, string Email)
    {
        if (au.Uname == "****" && au.Pwd == "*****")
        {
            int getCustomerId;
            using (SqlConnection con = new SqlConnection(cs))
            {
                using (SqlCommand cmd = new SqlCommand("InsertCustomer", con))
                {
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.Parameters.AddWithValue("@Name", Name);
                    cmd.Parameters.AddWithValue("@Phone", Phone);
                    cmd.Parameters.AddWithValue("@City", City);
                    cmd.Parameters.AddWithValue("@Email", Email);
                    cmd.Connection = con;
                    con.Open();
                    getCustomerId = Convert.ToInt32(cmd.ExecuteScalar());
                    con.Close();
                    return getCustomerId.ToString();
                }
            }
        }
        else
        {
            return "Unauthorized Attempt";
        }
    }

А вот мое простое консольное приложение.

       static void Main(string[] args)
    {
        ServiceReference1.WebServiceCCMSoapClient ws = new ServiceReference1.WebServiceCCMSoapClient();
        ServiceReference1.AuthUser authUser = new ServiceReference1.AuthUser();
        authUser.Uname = "****";
        authUser.Pwd = "******";     
        string result = ws.InsertCustomer(authUser,"test", "test", "test", "test"); // here I need to pass authUser as parameter
        Console.WriteLine(result);
        Console.ReadLine();
    } 

В других примерах у людей была эта строка

   webService.AuthHeaderValue = authentication;

Но в моем коде я не могу найти AuthUserValue и, если возможно, я не хочу передавать эти значения аутентификации в качестве параметра в WebMethod. Это единственный способ или я что-то упустил?

Спасибо.

1 Ответ

0 голосов
/ 01 ноября 2018

Я нашел решение самостоятельно. Вместо использования,

    ServiceReference1.WebServiceCCMSoapClient ws = new 
    ServiceReference1.WebServiceCCMSoapClient();

необходимо использовать, ServiceReference1.ActualServiceName. Таким образом, я могу использовать ServiceNameValue.

...