Diskuze: Volání webové služby
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
FormGeneratorService.FormGeneratorServicePortTypeClient cl = new FormGeneratorService.FormGeneratorServicePortTypeClient()
Skončí na chybě:
Additional information: Oddíl konfigurace koncového bodu pro kontrakt
ePodatelna_GenratorFormulare.FormGeneratorServicePortType nebylo možné
načíst, protože pro tuto kontrakt bylo nalezeno více konfigurací koncového
bodu. Určete preferovaný oddíl konfigurace koncového bodu podle názvu.
STP:6.9.2017 10:37
Rozšiř vytvoření klienta o název endpointu z configfilu.
using (FormGeneratorService.FormGeneratorServicePortTypeClient cl = new FormGeneratorService.FormGeneratorServicePortTypeClient("FormGeneratorServiceSOAP11port_http"))
Michal Pflegshörl:6.9.2017 11:02
Máš více zkušeností s podáváním žádosti o PDF formulář na
ePodatelnu Justice.cz?
Asi by mi dost pomohlo vidět nějaký příklad celého kódu získání
vyplněného PDF formuláře.
Můj kód mi vrací chybu WS-01 XML data musi byt vyplnena.
DataSet Formular = new DataSet();
FileStream myFileStream = new FileStream("notar_1.xsd", System.IO.FileMode.Open);
System.Xml.XmlTextReader myXmlTextReader = new System.Xml.XmlTextReader(myFileStream);
Formular.ReadXmlSchema(myXmlTextReader);
myXmlTextReader.Close();
DataRow VkladanyRadek = Formular.Tables["osoba"].NewRow();
VkladanyRadek["titul_pred"] = "titul před";
VkladanyRadek["jmeno"] = "jméno";
VkladanyRadek["prijmeni"] = "příjmení";
VkladanyRadek["titul_za"] = "titul za";
Formular.Tables["osoba"].Rows.Add(VkladanyRadek);
VkladanyRadek = Formular.Tables["adresa"].NewRow();
VkladanyRadek["ulice"] = "ulice";
VkladanyRadek["psc"] = "PSČ";
VkladanyRadek["mesto"] = "město";
Formular.Tables["adresa"].Rows.Add(VkladanyRadek);
VkladanyRadek = Formular.Tables["spisova_znacka"].NewRow();
VkladanyRadek["cislo_senatu"] = "1";
VkladanyRadek["bc_vec"] = "2";
VkladanyRadek["druh_vec"] = "D";
VkladanyRadek["rocnik"] = "2017";
Formular.Tables["spisova_znacka"].Rows.Add(VkladanyRadek);
VkladanyRadek = Formular.Tables["rozhodnuti"].NewRow();
VkladanyRadek["zpusob_vyrizeni"] = "N";
VkladanyRadek["poznamka_vyrizeni"] = "poznámka";
VkladanyRadek["datum_vydano"] = "1.1.2017";
VkladanyRadek["datum_pravni_moc"] = "2.1.2017";
VkladanyRadek["datum_vykonatelnost"] = "3.1.2017";
VkladanyRadek["cislo_listu_rozhodnuti"] = "číslo listu";
Formular.Tables["rozhodnuti"].Rows.Add(VkladanyRadek);
VkladanyRadek = Formular.Tables["priloha"].NewRow();
VkladanyRadek["nazev"] = @"C:\Users\Michal\Desktop\Rejstrik.doc";
VkladanyRadek["fileid"] = @"C:\Users\Michal\Desktop\Rejstrik.doc";
Formular.Tables["priloha"].Rows.Add(VkladanyRadek);
VkladanyRadek = Formular.Tables["podpis"].NewRow();
VkladanyRadek["zpusob_odeslani"] = 2;
Formular.Tables["podpis"].Rows.Add(VkladanyRadek);
VkladanyRadek = Formular.Tables["odeslani_sf"].NewRow();
VkladanyRadek["datum_podani_zadosti"] = "4.1.2017";
VkladanyRadek["verze_formulare"] = "verze";
Formular.Tables["odeslani_sf"].Rows.Add(VkladanyRadek);
VkladanyRadek = Formular.Tables["epo_odeslani_sf"].NewRow();
VkladanyRadek["email"] = "[email protected]";
VkladanyRadek["guid"] = "guid";
Formular.Tables["epo_odeslani_sf"].Rows.Add(VkladanyRadek);
string filename = "Zadost.xml";
System.IO.FileStream myFileStream2 = new System.IO.FileStream(filename,System.IO.FileMode.Create);
System.Xml.XmlTextWriter myXmlWriter = new System.Xml.XmlTextWriter(myFileStream2, System.Text.Encoding.Unicode);
Formular.WriteXml(myXmlWriter);
myXmlWriter.Close();
Byte[] bytes = File.ReadAllBytes("Zadost.xml");
generujFormular Generuj = new generujFormular();
Generuj.typ = "A";
Generuj.subtyp = "4";
Generuj.xmlData = bytes;
generujFormularRequest req = new generujFormularRequest(Generuj);
generujFormularResponse Odpoved = new generujFormularResponse();
using (ePodatelna_GenratorFormulare.FormGeneratorServicePortTypeClient cl = new Podatelna_GenratorFormulare.FormGeneratorServicePortTypeClient("FormGeneratorServiceSOAP11port_http"))
{
var ret = cl.generujFormular(new ePodatelna_GenratorFormulare.generujFormular());
Odpoved = (generujFormularResponse)ret;
}
if (Odpoved.@return.stav != "OK")
{
MessageBox.Show(Odpoved.@return.kodChyby + "\n" + Odpoved.@return.detailChyby, "Chyba", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
STP:6.9.2017 12:10
Zkušenosti s podáváním žádosti o PDF formulář na ePodatelnu
Justice.cz bohužel nemám.
Aby si zavolal tu danou službu potřebujes jí předat parametr.
Místo
var ret = cl.generujFormular(new ePodatelna_GenratorFormulare.generujFormular());
předáš ten svůj.
var ret = cl.generujFormular(Generuj);
Over, zda je hodnota 'bytes' vobec vyplnena, resp. ci ma vysledne XML uvedenu
deklaraciu: <?xml version="1.0" encoding="utf-8">?
Mne to s fake XML preslo a vratila sa mi uz validacna chyba vstupne XML.
M.
Priklad najjednoduchsieho volania:
XDocument sourceDataInXml = new XDocument(
new XElement("Test",
new XElement("TestElement", "ws test")
));
sourceDataInXml.Declaration = new XDeclaration("1.0", "utf-8", "yes");
// vstupny parameter pre webovu sluzbu
generujFormular Generuj = new generujFormular();
Generuj.typ = "A";
Generuj.subtyp = "4";
Generuj.xmlData = Encoding.UTF8.GetBytes(sourceDataInXml.ToString());
FormGeneratorServicePortTypeClient client = new
FormGeneratorServicePortTypeClient("NAZOV ENDPOINTU!!!");
generujFormularResponse response = client.generujFormular(Generuj);
Michal Pflegshörl:6.9.2017 12:39
To vypadá opravdu dost jednoduše.
Bohužel
XDocument sourceDataInXml = new XDocument(
new XElement("Test",
new XElement("TestElement", "ws test")
));
Vyhazuje chybu:
Znak - (šestnáctková hodnota 0xAD) nelze použít v názvu.
Popisal som jednoduche volanie. Netusim, co mas v XML subore 'Zadost.xml'.
Ked som to volal s xml bez deklaracie, vracalo mi to chybu, aku popisujes.
Ja aktualne dostavam chybu:
Type=Error;PublicID=null;SystemID=null;LineNumber=-1;ColumnNumber=-1;Message=cvc-elt.1:
Cannot find the declaration of element 'Test'.
Neopieraj sa o moje vstupne xml, je to fake, len na overenie volania. Volanie je ok, bytes[] si nahrad svojimi datmi.
M.
Tak nakonec jsem dal dohromady následující kód.
Požadavek na vygenerování formuláře
Priloha[] Prilohy = new Priloha[dataGridView_VyrizeniPrilohy.Rows.Count + dataGridView_PatickaPrilohy.Rows.Count];
int IdPrilohy = 0;
List<object> Root = new List<object>();
//Soud
Root.Add(new XElement("soud", ((ComboboxItem)comboBox_Soud.SelectedItem).Hodnota));
//Komisař
List<object> Komisar = new List<object>();
List<object> KomisarOsoba = new List<object>();
KomisarOsoba.Add(new XElement("titul_pred", textBox_KomisarTitulPred.Text));
KomisarOsoba.Add(new XElement("jmeno", textBox_KomisarJmeno.Text));
KomisarOsoba.Add(new XElement("prijmeni", textBox_KomisarPrijmeni.Text));
KomisarOsoba.Add(new XElement("titul_za", textBox_KomisarTitulZa.Text));
Komisar.Add(new XElement("osoba", KomisarOsoba));
List<object> KomisarAdresa = new List<object>();
KomisarAdresa.Add(new XElement("ulice", textBox_KomisarUlice.Text));
KomisarAdresa.Add(new XElement("psc", textBox_KomisarPSC.Text));
KomisarAdresa.Add(new XElement("mesto", textBox_KomisarMesto.Text));
Komisar.Add(new XElement("adresa", KomisarAdresa));
Root.Add(new XElement("komisar", Komisar));
//Spisová značka
List<object> SpisovaZnacka = new List<object>();
SpisovaZnacka.Add(new XElement("cislo_senatu", textBox_CisloSenatu.Text));
SpisovaZnacka.Add(new XElement("druh_vec", "D"));
SpisovaZnacka.Add(new XElement("bc_vec", textBox_BcVec.Text));
SpisovaZnacka.Add(new XElement("rocnik", textBox_Rocnik.Text));
Root.Add(new XElement("spisova_znacka", SpisovaZnacka));
//Zůstavitel
List<object> Zustavitel = new List<object>();
List<object> ZustavitelOsoba = new List<object>();
ZustavitelOsoba.Add(new XElement("jmeno", textBox_ZustavitelJmeno.Text));
ZustavitelOsoba.Add(new XElement("prijmeni", textBox_ZustavitelPrijmeni.Text));
ZustavitelOsoba.Add(new XElement("datum_narozeni", maskedTextBox_ZustavitelDatumNarozeni.Text.Replace(" . .", "")));
Zustavitel.Add(new XElement("osoba", ZustavitelOsoba));
List<object> ZustavitelAdresa = new List<object>();
ZustavitelAdresa.Add(new XElement("ulice", textBox_ZustavitelUlice.Text));
ZustavitelAdresa.Add(new XElement("psc", textBox_ZustavitelPSC.Text));
ZustavitelAdresa.Add(new XElement("mesto", textBox_ZustavitelMesto.Text));
ZustavitelAdresa.Add(new XElement("stat", comboBox_Stat.Text));
Zustavitel.Add(new XElement("adresa", ZustavitelAdresa));
Root.Add(new XElement("zustavitel", Zustavitel));
//Rozhodnutí
List<object> Rozhodnuti = new List<object>();
Rozhodnuti.Add(new XElement("zpusob_vyrizeni", ((ComboboxItem)comboBox_ZpusobVyrizeni.SelectedItem).Hodnota));
Rozhodnuti.Add(new XElement("poznamka_vyrizeni", textBox_VyrizeniPoznamka.Text));
Rozhodnuti.Add(new XElement("cislo_listu_rozhodnuti", textBox_RozhodnutiCisloListu.Text));
Rozhodnuti.Add(new XElement("datum_vydano", maskedTextBox_Vydano.Text));
Rozhodnuti.Add(new XElement("datum_pravni_moc", maskedTextBox_PravniMoc.Text));
Rozhodnuti.Add(new XElement("datum_vykonatelnost", maskedTextBox_Vykonatelnost.Text.Replace(" . .", "")));
List<object> VyrokyOpak = new List<object>();
int CisloVyroku = 0;
foreach (DataGridViewRow Radek in dataGridView_Vyroky.Rows)
{
if (Radek.IsNewRow)
continue;
CisloVyroku++;
List<object> Vyroky = new List<object>();
Vyroky.Add(new XElement("cislo_vyroku", CisloVyroku.ToString()));
Vyroky.Add(new XElement("text_vyroku", (Radek.Cells["Vyrok"].Value != null ? Radek.Cells["Vyrok"].Value.ToString() : "")));
Vyroky.Add(new XElement("datum_PM_vyroku", (Radek.Cells["PravniMoc"].Value != null ? Radek.Cells["PravniMoc"].Value.ToString() : "")));
Vyroky.Add(new XElement("datum_vykonatelnost_vyroku", (Radek.Cells["Vykonatelnost"].Value != null ? Radek.Cells["Vykonatelnost"].Value.ToString() : "")));
VyrokyOpak.Add(new XElement("vyroky", Vyroky));
}
Rozhodnuti.Add(new XElement("vyroky_opak", VyrokyOpak));
List<object> RozhodnutiPrilohaSf = new List<object>();
List<object> RozhodnutiPrilohaOpak = new List<object>();
foreach (DataGridViewRow Radek in dataGridView_VyrizeniPrilohy.Rows)
{
if (Radek.IsNewRow)
continue;
IdPrilohy++;
List<object> RozhodnutiPriloha = new List<object>();
RozhodnutiPriloha.Add(new XElement("nazev", new FileInfo(Radek.Cells["Priloha"].Value.ToString()).Name));
RozhodnutiPriloha.Add(new XElement("fileId", IdPrilohy.ToString()));
RozhodnutiPrilohaOpak.Add(new XElement("priloha", RozhodnutiPriloha));
Prilohy[IdPrilohy - 1] = new Priloha();
Prilohy[IdPrilohy - 1].idVeFormulari = IdPrilohy.ToString();
Prilohy[IdPrilohy - 1].jmenoSouboru = new FileInfo(Radek.Cells["Priloha"].Value.ToString()).Name;
Prilohy[IdPrilohy - 1].data = Encoding.UTF8.GetBytes(File.ReadAllText(Radek.Cells["Priloha"].Value.ToString()));
}
RozhodnutiPrilohaSf.Add(new XElement("priloha_opak", RozhodnutiPrilohaOpak));
Rozhodnuti.Add(new XElement("priloha_sf", RozhodnutiPrilohaSf));
Root.Add(new XElement("rozhodnuti", Rozhodnuti));
//Zápatí
List<object> Zapati = new List<object>();
Zapati.Add(new XElement("poznamka_komisare", textBox_PatickaPoznamka.Text));
List<object> ZapatiPrilohaSf = new List<object>();
List<object> ZapatiPrilohaOpak = new List<object>();
foreach (DataGridViewRow Radek in dataGridView_PatickaPrilohy.Rows)
{
if (Radek.IsNewRow)
continue;
IdPrilohy++;
List<object> ZapatiPriloha = new List<object>();
ZapatiPriloha.Add(new XElement("nazev", new FileInfo(Radek.Cells["PatickaPriloha"].Value.ToString()).Name));
ZapatiPriloha.Add(new XElement("fileId", IdPrilohy.ToString()));
ZapatiPrilohaOpak.Add(new XElement("priloha", ZapatiPriloha));
Prilohy[IdPrilohy - 1] = new Priloha();
Prilohy[IdPrilohy - 1].idVeFormulari = IdPrilohy.ToString();
Prilohy[IdPrilohy - 1].jmenoSouboru = new FileInfo(Radek.Cells["PatickaPriloha"].Value.ToString()).Name;
Prilohy[IdPrilohy - 1].data = Encoding.UTF8.GetBytes(File.ReadAllText(Radek.Cells["PatickaPriloha"].Value.ToString()));
}
ZapatiPrilohaSf.Add(new XElement("priloha_opak", ZapatiPrilohaOpak));
Zapati.Add(new XElement("priloha_sf", ZapatiPrilohaSf));
List<object> Podpis = new List<object>();
Podpis.Add(new XElement("zpusob_odeslani", "2"));//ePodatelna MSp
List<object> OdeslaniSf = new List<object>();
OdeslaniSf.Add(new XElement("datum_podani_zadosti", maskedTextBox_DatumPredlozeni.Text));
OdeslaniSf.Add(new XElement("verze_formulare", "0"));
Podpis.Add(new XElement("odeslani_sf", OdeslaniSf));
List<object> EpoOdeslaniSf = new List<object>();
EpoOdeslaniSf.Add(new XElement("guid", "guid"));
EpoOdeslaniSf.Add(new XElement("email", textBox_Email.Text));
Podpis.Add(new XElement("epo_odeslani_sf", EpoOdeslaniSf));
Zapati.Add(new XElement("podpis", Podpis));
Root.Add(new XElement("zapati", Zapati));
XNamespace ns = "http://epodatelna.justice.cz/notar";
XDocument sourceDataInXml = new XDocument(new XElement(ns + "root", Root));
sourceDataInXml.Declaration = new XDeclaration("1.0", "utf-8", "yes");
generujFormular Generuj = new generujFormular();
Generuj.typ = "A";
Generuj.subtyp = "4";
Generuj.xmlData = Encoding.UTF8.GetBytes(sourceDataInXml.ToString());
Generuj.seznamPriloh = Prilohy;
generujFormularResponse Odpoved = new generujFormularResponse();
using (FormGeneratorServicePortTypeClient cl = new FormGeneratorServicePortTypeClient("FormGeneratorServiceSOAP11port_http"))
{
var ret = cl.generujFormular(Generuj);
Odpoved = (generujFormularResponse)ret;
}
if (Odpoved.@return.stav != "OK")
{
MessageBox.Show(Odpoved.@return.kodChyby + "\n" + Odpoved.@return.detailChyby, "Chyba", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
vratFormular Vraceny = new vratFormular();
Vraceny.IdPozadavku = Odpoved.@return.idPozadavku;
vratFormularResponse Formular = new vratFormularResponse();
DateTime Start = DateTime.Now;
while (Formular.@return == null || (Formular.@return.stav != "ZPRACOVAN" && Formular.@return.stav != "CHYBNY"))
{
if ((DateTime.Now - Start).Seconds > 30)
{
if (MessageBox.Show("Požadavek na generování formuláře je stále ve stavu " + Formular.@return.stav + "\nChcete pokračovat v čekání?", "Dotaz", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) != DialogResult.Yes)
{
MessageBox.Show("Požadavek byl zrušen!", "Informace", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
Start = DateTime.Now;
}
using (FormGeneratorServicePortTypeClient cl = new FormGeneratorServicePortTypeClient("FormGeneratorServiceSOAP11port_http"))
{
var ret = cl.vratFormular(Vraceny);
Formular = (vratFormularResponse)ret;
}
}
if (Formular.@return.stav != "ZPRACOVAN")
{
MessageBox.Show(Formular.@return.kodChyby + "\n" + Formular.@return.detailChyby, "Chyba", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
while (String.IsNullOrEmpty(CestaFormulare) || File.Exists(CestaFormulare))
CestaFormulare = CestaTempu + "\\" + DateTime.Now.ToString("yyMMddHHmmss") + ".pdf";
File.WriteAllBytes(CestaFormulare, Formular.@return.pdfFormular);
IdPozadavku = Vraceny.IdPozadavku;
A podání podepsaného formuláře (nejsem si 100% jistý zda funguje)
odesliPodani Odesli = new odesliPodani();
Odesli.typ = "A";
Odesli.subtyp = "4";
Odesli.formular = Encoding.UTF8.GetBytes(File.ReadAllText(CestaFormulare));
odesliPodaniResponse Odpoved = new odesliPodaniResponse();
using (FormProcessorServicePortTypeClient cl = new FormProcessorServicePortTypeClient("FormProcessorServiceSOAP11port_http"))
{
var ret = cl.odesliPodani(Odesli);
Odpoved = (odesliPodaniResponse)ret;
}
if (Odpoved.@return.stav != "OK")
{
MessageBox.Show("Chyba služby B1 (odeslání podání)!\nId požadavku: " + IdPozadavku + "\nDočasné GUID: " + Odpoved.@return.docasneGuid + "\n\n" + Odpoved.@return.kodChyby + "\n" + Odpoved.@return.detailChyby, "Chyba", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
vratStavPodani StavPodani = new vratStavPodani();
StavPodani.guid = IdPozadavku;
StavPodani.docasneGuid = Odpoved.@return.docasneGuid;
vratStavPodaniResponse Formular = new vratStavPodaniResponse();
DateTime Start = DateTime.Now;
while (Formular.@return == null || (Formular.@return.stav != "ZPRACOVAN" && Formular.@return.stav != "CHYBA"))
{
if ((DateTime.Now - Start).Seconds > 30)
{
if (MessageBox.Show("Požadavek na odeslání formuláře je stále ve stavu " + Formular.@return.stav + "\nChcete pokračovat v čekání?", "Dotaz", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) != DialogResult.Yes)
{
MessageBox.Show("Požadavek byl zrušen!", "Informace", MessageBoxButtons.OK, MessageBoxIcon.Information);
this.Close();
return;
}
Start = DateTime.Now;
}
using (FormProcessorServicePortTypeClient cl = new FormProcessorServicePortTypeClient("FormProcessorServiceSOAP11port_http"))
{
var ret = cl.vratStavPodani(StavPodani);
Formular = (vratStavPodaniResponse)ret;
}
}
if (Formular.@return.stav != "ZPRACOVAN")
{
MessageBox.Show("Chyba služby B2 (ověření stavu podání)!\nGUID: " + StavPodani.guid + "\nDOčasné GUID: " + StavPodani.docasneGuid + "\n\n" + Formular.@return.kodChyby + "\n" + Formular.@return.detailChyby, "Chyba", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
+5 Zkušeností
A?
Michal Pflegshörl:9.1.2018 14:21
Chtěl jsem se podělit o funkční řešení problému
Ja som ho o to poziadal.. a dakujem mu za to
Zobrazeno 14 zpráv z 14.