Event button click działa lokalnie, ale nie na serwerze

0

Cześć!
Mam pewien problem, z którym walczę od prawie 2 dni i nadal nie mam pojęcia dlaczego tak się dzieje. Poniżej mój kod, który na serwerze wykonuje się do momentu zamknięcia połączenia z bazą danych - con.Close(); Dalej nie chce iść, a lokalnie u mnie cały skrypt działa.

string query = "INSERT INTO CMS_ORDERS_BUYERS (BUYER_ID, BUYER_DATE, BUYER_NAME, BUYER_SURNAME, BUYER_ADRESS, BUYER_CITY, BUYER_POSTCODE, BUYER_MAIL, BUYER_PHONE, BUYER_DELIVERY, BUYER_VAT, BUYER_GUID, CLIENT_ID, BUYER_NIP, BUYER_COMPANY, BUYER_CODE) VALUES (@ID, @DATE, @NAME, @SURNAME, @ADRESS, @CITY, @POSTCODE, @MAIL, @PHONE, @DELIVERY, @VAT, @GUID, @CLIENT_ID, @NIP, @COMPANY, @CODE)";
                SqlCommand cmd = new SqlCommand(query, con);
                cmd.Parameters.Add("@ID", System.Data.SqlDbType.NVarChar).Value = id;
                cmd.Parameters.Add("@DATE", System.Data.SqlDbType.NVarChar).Value = DateTime.Now;
                cmd.Parameters.Add("@NAME", System.Data.SqlDbType.NVarChar).Value = Imię.Text;
                cmd.Parameters.Add("@SURNAME", System.Data.SqlDbType.NVarChar).Value = Nazwisko.Text;
                cmd.Parameters.Add("@ADRESS", System.Data.SqlDbType.NVarChar).Value = Adres.Text;
                cmd.Parameters.Add("@CITY", System.Data.SqlDbType.NVarChar).Value = Miejscowość.Text;
                cmd.Parameters.Add("@POSTCODE", System.Data.SqlDbType.NVarChar).Value = KodPocztowy.Text;
                cmd.Parameters.Add("@MAIL", System.Data.SqlDbType.NVarChar).Value = Email.Text;
                cmd.Parameters.Add("@PHONE", System.Data.SqlDbType.NVarChar).Value = Telefon.Text;
                cmd.Parameters.Add("@DELIVERY", System.Data.SqlDbType.NVarChar).Value = DropDownList1.SelectedValue;
                cmd.Parameters.Add("@VAT", System.Data.SqlDbType.NVarChar).Value = VAT;
                cmd.Parameters.Add("@GUID", System.Data.SqlDbType.NVarChar).Value = Request.Cookies["GUID"].Value;
                cmd.Parameters.Add("@CLIENT_ID", System.Data.SqlDbType.Int).Value = int.Parse(HiddenField1.Value);
                cmd.Parameters.Add("@NIP", System.Data.SqlDbType.NVarChar).Value = NIP.Text;
                cmd.Parameters.Add("@COMPANY", System.Data.SqlDbType.NVarChar).Value = Company.Text;
                cmd.Parameters.Add("@CODE", System.Data.SqlDbType.NVarChar).Value = Rabat.Text;
                con.Open();
                cmd.ExecuteNonQuery();
                con.Close();

                string listaProduktow = "";
                foreach (GridViewRow row in GridView1.Rows)
                {
                    listaProduktow += row.Cells[2].Text + "x " + row.Cells[1].Text + ", ";
                }

                string rodzajPrzesylki = DropDownList1.SelectedValue.Substring(0, DropDownList1.SelectedValue.IndexOf("-"));

                string kwotaRazem = GridView1.FooterRow.Cells[4].Text.Substring(0, GridView1.FooterRow.Cells[4].Text.IndexOf(" "));

                string cenaPrzesylki = DropDownList1.SelectedValue.Substring(DropDownList1.SelectedValue.IndexOf("-") + 1);

                string z24_id_sprzedawcy = "*****";
                string z24_nazwa = "****** - zamowienie " + id.ToString();
                string z24_crc = "******";
                string z24_return_url = "http://" + Request.Url.Host + "/koszyk.aspx?done";
                decimal znizka = 1 - Convert.ToDecimal(znizkaZBazy) / 100;
                decimal kwotaZamowienie = Convert.ToDecimal(kwotaRazem);
                decimal kwotaPrzesylka = Convert.ToDecimal(cenaPrzesylki.Substring(0, cenaPrzesylki.IndexOf("P")));
                decimal z24_kwota_decimal = ((znizka * kwotaZamowienie) + kwotaPrzesylka) * 100;
                string z24_kwota = Convert.ToInt32(z24_kwota_decimal).ToString();

                string przelewy24URL = "https://sklep.przelewy24.pl/zakup.php?z24_id_sprzedawcy=" + z24_id_sprzedawcy + "&z24_nazwa=" + z24_nazwa + "&z24_crc=" + z24_crc + "&z24_kwota=" + z24_kwota + "&z24_return_url=" + z24_return_url + "";

                string body = PopulateBody(id.ToString(), DateTime.Now.ToString(), Imię.Text, Nazwisko.Text, Adres.Text, KodPocztowy.Text, Miejscowość.Text, Telefon.Text, Email.Text, listaProduktow, rodzajPrzesylki, (znizka * kwotaZamowienie).ToString("0.00"), cenaPrzesylki, NIP.Text, Company.Text);
                SendHtmlFormattedEmail(Email.Text, "Zamówienie - Naturalna Wytwórnia Piękna", body);

                Response.Redirect(przelewy24URL);

W czym może tkwić problem?

EDIT 1:
Skrypt nie szedł dalej, ponieważ miałem pochrzanione coś z UpdatePanelem, w którym znajdowały się textboxy, których treść zapisywana jest w bazie danych. Po ogarnięciu UpdatePanelu (dokładnie zapomniałem usunąć asynchronicznego triggera dla tego buttona, a przecież on już nie był w UP) i nie wyrzucało mi wyjątku. Natomiast teraz mam coś z wysyłaniem mail'a:

Security Exception

Description: The application attempted to perform an operation not allowed by the security policy. To grant this application the required permission please contact your system administrator or change the application's trust level in the configuration file.

Exception Details: System.Security.SecurityException: Request for the permission of type 'System.Net.Mail.SmtpPermission, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.

O co dokładnie może chodzić? Skrypt poniżej:

using (MailMessage mailMessage = new MailMessage())
            {
                mailMessage.From = new MailAddress(ConfigurationManager.AppSettings["Nadawca"]);
                mailMessage.Subject = Title;
                mailMessage.Body = body;
                mailMessage.IsBodyHtml = true;
                mailMessage.To.Add(new MailAddress(odbiorcaMail));
                SmtpClient smtp = new SmtpClient();
                smtp.Host = ConfigurationManager.AppSettings["Host"];
                smtp.EnableSsl = Convert.ToBoolean(ConfigurationManager.AppSettings["EnableSsl"]);
                System.Net.NetworkCredential NetworkCred = new System.Net.NetworkCredential();
                NetworkCred.UserName = ConfigurationManager.AppSettings["Nadawca"];
                NetworkCred.Password = ConfigurationManager.AppSettings["Password"];
                //smtp.UseDefaultCredentials = true;
                smtp.Credentials = NetworkCred;
                smtp.Port = int.Parse(ConfigurationManager.AppSettings["Port"]);
                smtp.Send(mailMessage);
            }

EDIT 2:

Chodziło o port TLS... Musiałem w web.configu zmienić port z 587 na 25 i wszystko śmiga aż miło. Taki banał, a ile nerwów :)

0

;(

Skąd wiesz, że akurat do con.Close()?
Bo jeśli jesteś tego pewien, to znaczy, że to logujesz, a skoro logujesz, to powinieneś wiedzieć, czemu nie działa.

0

Bo wykonuje mi całego inserta, więc cmd.ExecutionNonQuery(); działa. Widzę w panelu administracyjnym, że insert poszedł i zapisało do bazy. Wcześniej miałem wrzucone pomiędzy con.Close(); a pętle usuwanie ciasteczka i docierało do wykonania inserta, ale ciasteczek już nie usuwało. Myślałem, że to może jest wina ciasteczek, ale usunąłem to i nadal nie śmiga. Najlepsze jest to, że lokalnie w Visual Studio wszystko działa bez zarzutu...

EDIT
Odpowiedź w moim pierwszym poście.

1

Ja bym zaczął od refactoringu kodu bo woła o pomste do boga. Strasznie wymieszanie odpowiedzialności poszczególnych komponentów.

1 użytkowników online, w tym zalogowanych: 0, gości: 1