- using BapPress.BapService.ServiceMessages;
- using BapFramework.Data.Generic;
- using System;
- using System.Collections.Generic;
- using System.Data;
- using System.Linq;
- using System.Text;
- using System.Security.Permissions;
- using System.Web.Services.Protocols;
- using System.Web.Services.Configuration;
- using System.Reflection;
- using System.IO;
- using System.Net;
- namespace BapPress.BapService.Services.SPL
- {
- [GroupItem("Książki nadawcze", "Wysyłanie książki nadawczej Poczty Polskiej")]
- class Post //: GroupElement\
- {
- private ConnectionBase conn;
- private string PostPassword_1;
- private string PostPassword_8;
- private string PostPassword_11;
- private string PostPassword_13;
- private int STAGE;
- public Post(ConnectionBase conn)
- //: base(conn)
- {
- this.conn = conn;
- STAGE = int.Parse(conn.GetScalar<string>(string.Format("SELECT DBA.ConfigRead('{0}','STAGE');", this.GetType().ToString())));
- ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
- }
- public event Action<MessageType, string, string, bool> Message;
- private void SendMessage(MessageType type, string message, bool log)
- {
- Message?.Invoke(type, "Post", message, log);
- }
- public bool Execute()
- {
- bool ret = true;
- string sql = "select ID,CompanyID from DBA.IC_SendBooks with(nolock) WHERE EndDate > '2012-08-01' and ExportID is null and icsendkindid in (100,101,103)";
- //SMYKOUT
- if (STAGE > 3)
- sql += " AND CompanyID <> 8";
- sql += ";";
- DataTable dt = conn.GetTable(sql);
- PostPassword_1 = null;
- PostPassword_8 = null;
- PostPassword_11 = null;
- PostPassword_13 = null;
- if (Properties.Settings.Default.Post_LogMessages.Value == "T")
- RegisterSoapExtension(typeof(TraceExtension), 1, PriorityGroup.Low);
- try
- {
- if (dt.Rows.Count > 0)
- {
- System.Net.ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) => true);
- foreach (int CompanyID in dt.Rows.Cast<DataRow>().Select(r => (int)r["CompanyID"]).Distinct())
- {
- switch (CompanyID)
- {
- case 1:
- PostPassword_1 = CheckLogin(CompanyID);
- break;
- case 8:
- PostPassword_8 = CheckLogin(CompanyID);
- break;
- case 11:
- PostPassword_11 = CheckLogin(CompanyID);
- break;
- case 13:
- PostPassword_13 = CheckLogin(CompanyID);
- break;
- }
- }
- }
- }
- catch (Exception ex)
- {
- SendMessage(MessageType.Error, ex.Message, false);
- return false;
- }
- foreach (DataRow row in dt.Rows)
- {
- //wołaj webservice
- int id = (int)row["ID"];
- SendMessage(MessageType.Info, "Wysyłanie manifestu pocztowego ID = " + id.ToString(), false);
- string ans = SendPostDocs(id);
- SendMessage(MessageType.Info, ans, false);
- if (Properties.Settings.Default.Post_LogMessages.Value == "T")
- {
- FileInfo fi = new FileInfo(Properties.Settings.Default.ManifestoSender_FilePath + "PostManifestoLog.log");
- if (fi.Exists)
- fi.MoveTo(Properties.Settings.Default.ManifestoSender_FilePath + $"PostManifestoLog - {id}.log");
- }
- }
- dt.Dispose();
- return ret;
- }
- private string SendPostDocs(int SendBookID)
- {
- string response = "";
- int export = -1;
- SendMessage(MessageType.Info, "Eksport książki nadawczej ID = " + SendBookID.ToString(), true);
- try
- {
- DataTable packets;// = new DataTable();
- try
- {
- packets = conn.GetTable("CALL DBA.SPL_GetPostData(" + SendBookID.ToString() + ")");
- response = SendPostManifesto(packets, out export);
- if (export > 0)
- {
- //update IC_SendBook
- //conn.Execute("UPDATE DBA.IC_SendBooks SET ExportID = " + export.ToString() + ",ExportDate = now() WHERE ID = " + SendBookID.ToString() + ";");
- conn.Execute(string.Format("CALL DBA.IC_SetSendBookExport({0}, '{1}');", SendBookID, export));
- SendMessage(MessageType.Info, "Koniec eksportu EnvelopeID = " + export.ToString(), true);
- }
- else
- SendMessage(MessageType.Warning, "Koniec eksportu Error: " + response, true);
- }
- catch (Exception ex)
- {
- response = "Exception trying to make database connection\n";
- response += ex.Message;
- SendMessage(MessageType.Error, ex.Message, true);
- }
- }
- catch (Exception e)
- {
- response = "Exception\n";
- response += e.Message;
- SendMessage(MessageType.Error, e.Message, true);
- }
- return response;
- }
- private string SendPostManifesto(DataTable packets, out int exportID)
- {
- string response = "";
- exportID = -1;
- //string passwd = CheckLogin();
- int STAGE = int.Parse(Properties.Settings.Default.STAGE.Value);
- System.Net.NetworkCredential c = new System.Net.NetworkCredential();
- //SMYKOUT
- if (STAGE == 2)
- {
- switch ((int)packets.Rows[0]["CompanyID"])
- {
- case 1:
- c.UserName = Properties.Settings.Default.Post_userId_1.Value;
- c.Password = PostPassword_1;
- break;
- case 8:
- c.UserName = Properties.Settings.Default.Post_userId_8.Value;
- c.Password = PostPassword_8;
- break;
- }
- }
- else if (STAGE > 2 && (int)packets.Rows[0]["CompanyID"] == 8)
- {
- return "Nie wysyłamy manifestów smykowych!";
- }
- else
- {
- switch ((int)packets.Rows[0]["CompanyID"])
- {
- case 1:
- c.UserName = Properties.Settings.Default.Post_userId_1.Value;
- c.Password = PostPassword_1;
- break;
- case 11:
- c.UserName = Properties.Settings.Default.Post_userId_11.Value;
- c.Password = PostPassword_11;
- break;
- case 13:
- c.UserName = Properties.Settings.Default.Post_userId_13.Value;
- c.Password = PostPassword_13;
- break;
- }
- }
- System.Net.CredentialCache cc = new System.Net.CredentialCache();
- cc.Add(new Uri(Properties.Settings.Default.Post_url.Value), "Basic", c);
- Poczta.ElektronicznyNadawca nadawca = new Poczta.ElektronicznyNadawca();
- nadawca.Credentials = cc;
- nadawca.Url = Properties.Settings.Default.Post_url.Value.Replace("en.wsdl", "en.php");
- nadawca.Timeout = int.Parse(Properties.Settings.Default.Post_Timeout.Value);
- Poczta.errorType[] errors;
- bool retval;//, retvalSpecified;
- //string test = nadawca.hello("test");
- //SMYKOUT - Stage 1
- if (STAGE == 1)
- {
- switch ((int)packets.Rows[0]["CompanyID"])
- {
- case 1:
- errors = nadawca.setAktywnaKarta(264298);
- break;
- case 8:
- errors = nadawca.setAktywnaKarta(451948);
- break;
- }
- }
- else if (STAGE == 2)
- {
- switch ((int)packets.Rows[0]["CompanyID"])
- {
- case 1:
- errors = nadawca.setAktywnaKarta(461223);
- break;
- case 8:
- errors = nadawca.setAktywnaKarta(466756);
- break;
- }
- }
- /*Poczta.kartaType[] karty = nadawca.getKarty();
- foreach (Poczta.kartaType k in karty)
- SendMessage(MessageType.Info, string.Format("Karta ID:{0}, state:{1}", k.idKarta, k.aktywna), false);*/
- retval = nadawca.clearEnvelope(0, false, out errors);
- if (!retval) //(errors != null)
- return "Nie udało się zainicjalizować.";
- List<Poczta.przesylkaType> przesylki = new List<Poczta.przesylkaType>();
- Poczta.addShipmentResponseItemType[] ShipResp = null;
- StringBuilder errorlog = new StringBuilder();
- foreach (DataRow row in packets.Rows)
- {
- Poczta.adresType adres = new Poczta.adresType();
- adres.nazwa = row["RecName"].ToString();
- //adres.nazwa2 = row["Rec"].ToString();
- adres.ulica = row["RecStreet"].ToString();
- adres.numerDomu = row["RecStreetNumber"].ToString();
- adres.numerLokalu = row["RecFlatNumber"].ToString();
- adres.miejscowosc = row["RecTown"].ToString();
- adres.kodPocztowy = row["RecZIP"].ToString();
- adres.kraj = row["RecCountry"].ToString();
- //adres.telefon = row["RecPhoneNumber"].ToString();
- adres.mobile = row["RecPhoneNumber"].ToString();
- adres.email = row["RecEmail"].ToString();
- if ((int)row["ICSendKindID"] == 105 || (int)row["ICSendKindID"] == 106)
- adres.mobile = row["RecPhoneNumber"].ToString();
- //adres.nip
- //adres.osobaKontaktowa
- Poczta.pobranieType pobranie;
- if ((decimal)row["Kwota"] > 0)
- {
- pobranie = new Poczta.pobranieType();
- pobranie.sposobPobrania = Poczta.sposobPobraniaType.RACHUNEK_BANKOWY;
- pobranie.sposobPobraniaSpecified = true;
- pobranie.kwotaPobrania = (int)((decimal)row["Kwota"] * 100);
- pobranie.kwotaPobraniaSpecified = true;
- pobranie.nrb = row["AccountNumber"].ToString();
- pobranie.tytulem = row["WayBill"].ToString();
- pobranie.sprawdzenieZawartosciPrzesylkiPrzezOdbiorce = false;
- pobranie.sprawdzenieZawartosciPrzesylkiPrzezOdbiorceSpecified = false;
- }
- else
- pobranie = null;
- switch ((int)row["ICSendKindID"])
- {
- case 100:
- //Poczta - kraj bez pobrania
- Poczta.paczkaPocztowaType paczka = new Poczta.paczkaPocztowaType();
- paczka.guid = Guid.NewGuid().ToString();//row["PacketID"].ToString();
- paczka.opakowanieGuid = null;
- paczka.opis = null;
- paczka.pakietGuid = null;
- paczka.numerNadania = row["WayBill"].ToString();
- paczka.adres = adres;
- paczka.posteRestante = false;
- paczka.iloscPotwierdzenOdbioru = 0;
- paczka.kategoria = Poczta.kategoriaType.PRIORYTETOWA;
- paczka.gabaryt = Poczta.gabarytType.GABARYT_A;
- paczka.wartosc = 0;
- paczka.wartoscSpecified = (paczka.wartosc != 0);
- paczka.masa = (int)(((decimal)row["Weight"]) * 1000);
- paczka.masaSpecified = true;
- paczka.zwrotDoslanie = false;
- paczka.zwrotDoslanieSpecified = false;
- paczka.egzemplarzBiblioteczny = false;
- paczka.dlaOciemnialych = false;
- przesylki.Add(paczka);
- break;
- case 101:
- //Poczta - kraj pobranie
- Poczta.przesylkaPobraniowaType paczka1 = new Poczta.przesylkaPobraniowaType();
- paczka1.guid = Guid.NewGuid().ToString();//row["PacketID"].ToString();
- paczka1.opakowanieGuid = null;
- paczka1.opis = null;
- paczka1.pakietGuid = null;
- paczka1.numerNadania = row["WayBill"].ToString();
- paczka1.adres = adres;
- paczka1.pobranie = pobranie;
- paczka1.posteRestante = false;
- paczka1.iloscPotwierdzenOdbioru = 0;
- paczka1.kategoria = Poczta.kategoriaType.PRIORYTETOWA;
- paczka1.gabaryt = Poczta.gabarytType.GABARYT_A;
- paczka1.ostroznie = false;
- paczka1.wartosc = 0;
- paczka1.masa = (int)(((decimal)row["Weight"]) * 1000);
- przesylki.Add(paczka1);
- break;
- case 102:
- //Poczta zagranica
- Poczta.przesylkaPoleconaZagranicznaType paczka2 = new Poczta.przesylkaPoleconaZagranicznaType();
- paczka2.guid = Guid.NewGuid().ToString();//row["PacketID"].ToString();
- paczka2.opakowanieGuid = null;
- paczka2.opis = null;
- paczka2.pakietGuid = null;
- paczka2.numerNadania = row["WayBill"].ToString();
- paczka2.adres = adres;
- paczka2.posteRestante = false;
- paczka2.iloscPotwierdzenOdbioru = 0;
- paczka2.iloscPotwierdzenOdbioruSpecified = true;
- //paczka2.kategoria = Poczta.kategoriaType.PRIORYTETOWA;
- //paczka2.kategoriaSpecified = true;
- paczka2.masa = (int)(((decimal)row["Weight"]) * 1000);
- paczka2.masaSpecified = true;
- //paczka2.ekspres = false;
- //paczka2.ekspresSpecified = true;
- przesylki.Add(paczka2);
- break;
- case 103:
- case 105:
- case 106:
- case 108:
- Poczta.przesylkaBiznesowaType paczka3 = new Poczta.przesylkaBiznesowaType();
- paczka3.guid = Guid.NewGuid().ToString();
- paczka3.opakowanieGuid = null;
- paczka3.opis = null;
- paczka3.pakietGuid = null;
- paczka3.numerNadania = row["WayBill"].ToString();
- paczka3.adres = adres;
- paczka3.pobranie = pobranie;
- paczka3.gabaryt = (Poczta.gabarytBiznesowaType)Enum.Parse(typeof(Poczta.gabarytBiznesowaType), row["Gabaryt"].ToString());
- paczka3.gabarytSpecified = true;
- paczka3.Items = null;
- paczka3.masa = (int)(((decimal)row["Weight"]) * 1000);
- paczka3.masaSpecified = true;
- paczka3.ostroznie = false;
- paczka3.ostroznieSpecified = false;
- paczka3.wartosc = 0;
- paczka3.wartoscSpecified = false;
- //paczka3.epo
- //paczka3.ubezpieczenie
- //paczka3.zasadySpecjalne
- //paczka3.zasadySpecjalneSpecified
- //paczka3.terminSprawy
- //paczka3.sygnatura
- //paczka3.rodzaj
- //paczka3.opis
- //paczka3.numerTransakcjiOdbioru
- //paczka3.nadawca
- if (!row.IsNull("PickupPoint"))
- {
- if (!row.IsNull("WayBill2"))
- paczka3.numerTransakcjiOdbioru = row["WayBill2"].ToString();
- paczka3.Items = new object[] { new Poczta.urzadWydaniaEPrzesylkiType() { id = (int)row["PickupPoint"] } };
- }
- przesylki.Add(paczka3);
- break;
- }
- if (przesylki.Count >= 500)
- {
- ShipResp = nadawca.addShipment(przesylki.ToArray(), 0, false);
- PostLogSendPackets(ShipResp);
- foreach (Poczta.addShipmentResponseItemType resp in ShipResp.Where(r => r.error?.Length > 0))
- {
- string guid = (new Guid(resp.guid)).ToString();
- Poczta.przesylkaRejestrowanaType przesylka = przesylki.FirstOrDefault(p => p.guid == guid) as Poczta.przesylkaRejestrowanaType;
- if (przesylka != null)
- {
- string msg = string.Join("\n", resp.error.Select(e => $"{e.errorNumber}: {e.errorDesc}"));
- errorlog.Append($"{przesylka.numerNadania}\n{msg}\n\n");
- }
- }
- przesylki.Clear();
- }
- }
- if (przesylki.Count > 0)
- {
- ShipResp = nadawca.addShipment(przesylki.ToArray(), 0, false);
- PostLogSendPackets(ShipResp);
- foreach (Poczta.addShipmentResponseItemType resp in ShipResp.Where(r => r.error?.Length > 0))
- {
- string guid = (new Guid(resp.guid)).ToString();
- Poczta.przesylkaRejestrowanaType przesylka = przesylki.FirstOrDefault(p => p.guid == guid) as Poczta.przesylkaRejestrowanaType;
- if (przesylka != null)
- {
- string msg = string.Join("\n", resp.error.Select(e => $"{e.errorNumber}: {e.errorDesc}"));
- errorlog.Append($"{przesylka.numerNadania}\n{msg}\n\n");
- }
- }
- }
- if (errorlog.Length != 0)
- {
- //wyślij raport z błędami
- errorlog.Insert(0, "\nBłędy w eksporcie paczek do Poczty Polskiej:\n\n");
- conn.Execute(string.Format("CALL DBA.APP_Sender_SetEmailActions('PostError-{0:yyyyMMdd_HH}','{1}','{2}','','','Post Manifesto Errors','',0,30,1,'EmpikMail');", DateTime.Now, errorlog, Properties.Settings.Default.ManifestoErrorsEmail.Value));
- }
- Poczta.urzadNadaniaFullType[] uNadania = nadawca.getUrzedyNadania();
- Poczta.urzadNadaniaFullType urzad = uNadania.FirstOrDefault(u => u.urzadNadaniaSpecified && u.urzadNadania == (int)packets.Rows[0]["PostOffice"]);
- if (urzad != null)
- {
- int idEnvelope;
- bool idEnvelopeSpec;
- Poczta.envelopeStatusType envelopeStatus;
- bool envelopeStatusSpec;
- string envelopeFilename;
- Poczta.pakietType[] pakiety = new Poczta.pakietType[0];
- Poczta.profilType profil = null;
- nadawca.sendEnvelope(uNadania[0].urzadNadania, true, pakiety, 0, false, profil, out idEnvelope, out idEnvelopeSpec, out envelopeStatus, out envelopeStatusSpec, out errors, out envelopeFilename);
- if (errors != null && errors.Length > 0)
- {
- StringBuilder sb = new StringBuilder();
- foreach (Poczta.errorType err in errors)
- {
- sb.Append(err.errorNumber);
- sb.Append(" - ");
- sb.AppendLine(err.errorDesc);
- }
- response = sb.ToString();
- }
- if (envelopeStatusSpec)
- response += "\n" + envelopeStatus.ToString();
- if (idEnvelopeSpec)
- {
- exportID = idEnvelope;
- if (string.IsNullOrEmpty(response))
- response = string.Format("Książka nadawcza '{0}' wysłana.", envelopeFilename);
- }
- }
- else
- {
- response = "Nie znaleziono urzędu: " + packets.Rows[0]["PostOffice"].ToString();
- }
- nadawca.Dispose();
- return response;
- }
- private string CheckLogin(int CompanyID)
- {
- string passwd = null;
- string newpasswd = null;
- try
- {
- object obj = conn.GetScalar(string.Format("Select DBA.ConfigRead('Global','PostPassword_{0}');", CompanyID));
- if (obj != DBNull.Value)
- passwd = (string)obj;
- }
- catch (Exception ex)
- {
- passwd = null;
- SendMessage(MessageType.Error, ex.Message, true);
- }
- if (passwd != null)
- {
- Poczta.ElektronicznyNadawca nadawca = new Poczta.ElektronicznyNadawca();
- System.Net.NetworkCredential c = new System.Net.NetworkCredential();
- //SMYKOUT
- switch (CompanyID)
- {
- case 1:
- c.UserName = Properties.Settings.Default.Post_userId_1.Value;
- break;
- case 8:
- c.UserName = Properties.Settings.Default.Post_userId_8.Value;
- break;
- case 11:
- c.UserName = Properties.Settings.Default.Post_userId_11.Value;
- break;
- case 13:
- c.UserName = Properties.Settings.Default.Post_userId_13.Value;
- break;
- }
- c.Password = passwd;
- //c.UserName = Properties.Settings.Default.Post_userId_1.Value;
- //c.Password = passwd;
- System.Net.CredentialCache cc = new System.Net.CredentialCache();
- cc.Add(new Uri(Properties.Settings.Default.Post_url.Value), "Basic", c);
- nadawca.Credentials = cc;
- nadawca.Url = Properties.Settings.Default.Post_url.Value.Replace("en.wsdl", "en.php");
- DateTime date = nadawca.getPasswordExpiredDate();
- if (date < DateTime.Today.AddDays(5))
- {
- SendMessage(MessageType.Info, $"Hasło traci ważność w dniu {date.ToString("yyyy-MM-dd")}. Zmieniamy na nowe.", true);
- try
- {
- newpasswd = (string)conn.GetScalar(string.Format("CALL DBA.SPL_GetNewPostPassword({0});", CompanyID));
- }
- catch (Exception ex)
- {
- passwd = null;
- SendMessage(MessageType.Error, ex.Message, true);
- }
- SendMessage(MessageType.Info, $"Nowe hasło '{newpasswd}'", true);
- Poczta.errorType[] errors = null;
- if (newpasswd != null)
- errors = nadawca.changePassword(newpasswd);
- if (errors != null && errors.Length > 0)
- {
- string err = "";
- foreach (Poczta.errorType e in errors)
- err += "(" + e.errorNumber + ") - " + e.errorDesc + "\n";
- SendMessage(MessageType.Error, err, true);
- throw new Exception(err);
- }
- passwd = newpasswd;
- }
- nadawca.Dispose();
- }
- return passwd;
- }
- private void PostLogSendPackets(Poczta.addShipmentResponseItemType[] ShipResp)
- {
- for (int i = 0; i < ShipResp.Length; i++)
- {
- StringBuilder err = new StringBuilder();
- if (ShipResp[i].error != null)
- {
- foreach (Poczta.errorType e in ShipResp[i].error)
- err.AppendFormat("({0}) - {1}; ", e.errorNumber, e.errorDesc);
- SendMessage(MessageType.Warning, $"{ShipResp[i].guid} - {ShipResp[i].numerNadania} err: {err}", false);
- }
- SendMessage(MessageType.Warning, $"{ShipResp[i].guid} - {ShipResp[i].numerNadania} err: {err}", true);
- }
- }
- //public string[] GetPostOffice()
- //{
- // string passwd = null;
- // try
- // {
- // object obj = conn.GetScalar("Select DBA.ConfigRead('Global','PostPassword');");
- // if (obj != DBNull.Value)
- // passwd = (string)obj;
- // }
- // catch (Exception ex)
- // {
- // passwd = null;
- // SendMessage(MessageType.Error, ex.Message, true);
- // }
- // List<string> sl = new List<string>();
- // if (passwd != null)
- // {
- // Poczta.ElektronicznyNadawca nadawca = new Poczta.ElektronicznyNadawca();
- // System.Net.NetworkCredential c = new System.Net.NetworkCredential();
- // c.UserName = Properties.Settings.Default.Post_userId.Value;
- // c.Password = passwd;
- // System.Net.CredentialCache cc = new System.Net.CredentialCache();
- // cc.Add(new Uri(Properties.Settings.Default.Post_url.Value), "Basic", c);
- // nadawca.Credentials = cc;
- // try
- // {
- // Poczta.urzadNadaniaFullType[] uNadania = nadawca.getUrzedyNadania();
- // foreach (Poczta.urzadNadaniaFullType un in uNadania)
- // sl.Add(string.Format("{0};{1};{2}", un.urzadNadania, un.nazwaWydruk, un.opis));
- // }
- // catch (Exception ex)
- // {
- // return new string[] { ex.Message };
- // }
- // finally
- // {
- // nadawca.Dispose();
- // }
- // }
- // return sl.ToArray();
- //}
- /// <summary>
- /// Programatically registers a <see cref="SoapExtension"/> at runtime with the specified
- /// <see cref="SoapExtensionTypeElement.Priority"/> and <see cref="SoapExtensionTypeElement.Group"/> settings.
- /// </summary>
- /// <param name="type">The <see cref="Type"/> of the <see cref="SoapExtension"/> to register.</param>
- /// <param name="priority">
- /// A value that indicates the relative order in which this SOAP extension runs when multiple SOAP extensions are
- /// specified. Within each group the priority attribute distinguishes the overall relative priority of the SOAP
- /// extension. A lower priority number indicates a higher priority for the SOAP extension. The lowest possible
- /// value for the priority attribute is 1.
- /// </param>
- /// <param name="group">
- /// The relative priority group (e.g. Low or High) in which this SOAP extension runs when multiple SOAP extensions
- /// are configured to run.
- /// </param>
- [ReflectionPermission(SecurityAction.Demand, Unrestricted = true)]
- public static void RegisterSoapExtension(Type type, int priority, PriorityGroup group)
- {
- if (!type.IsSubclassOf(typeof(SoapExtension)))
- {
- throw new ArgumentException("Type must be derived from SoapException.", "type");
- }
- if (priority < 1)
- {
- throw new ArgumentOutOfRangeException("priority", priority, "Priority must be greater or equal to 1.");
- }
- // get the current web services settings...
- WebServicesSection wss = WebServicesSection.Current;
- // set SoapExtensionTypes collection to read/write...
- FieldInfo read BindingFlags.NonPublic | BindingFlags.Instance);
- readOnlyField.SetValue(wss.SoapExtensionTypes, false);
- // inject SoapExtension...
- wss.SoapExtensionTypes.Add(new SoapExtensionTypeElement(type, priority, group));
- // set SoapExtensionTypes collection back to readonly and clear modified flags...
- MethodInfo resetModifiedMethod = typeof(System.Configuration.ConfigurationElement).GetMethod("ResetModified", BindingFlags.NonPublic | BindingFlags.Instance);
- resetModifiedMethod.Invoke(wss.SoapExtensionTypes, null);
- MethodInfo setRead BindingFlags.NonPublic | BindingFlags.Instance);
- setReadOnlyMethod.Invoke(wss.SoapExtensionTypes, null);
- }
- }
- }