Problem z integracją z e-nadawcą Poczty Polskiej

0

Wiem, że to chyba nie do końca dobre miejsce, ale czy ktoś z szanownych Koleżanek i Kolegów miał (wątpliwą) przyjemność bawienia się w C# z WebApi Elektronicznego Nadawcy Poczty Polskiej?

Zabrałem się bojowo, zaimportowałem WSDLa, i już przy próbie wywołania metody testowej dostałem z buta w zęby:

"Atrybut System.Xml.Serialization.XmlAttributeAttribute obiektu XmlSerializer nie jest prawidłowy w withBioepo. Kiedy atrybut IsWrapped ma wartość true, obsługiwane są tylko atrybuty XmlElement, XmlArray, XmlArrayItem i XmlAnyElement."

przyznam, że nawet nie wiem po jakiemu to...

0

Ostatnio napotkałem na podoby problem.

Żeby uruchomić usługę w Visual Studio, ostatecznie musiałem wygenerować kod przy pomocy svcutil.exe.

svcutil /t:code en.wsdl /out:wsdl.cs /serializer:XmlSerializer /wrapped

Powyższa komenda generuje plik wsdl.cs, który można dodać do projektu.

Trzeba jednak mieć na uwadze fakt, że tak wygenerowany kod znacznie różni się od kodu domyślnego.

0

Niepotrzebnie kombinujesz. Już nie pamiętam o co tam chodziło, ale rozwiązanie było banalne. Napisz z czym miałeś problem to postaram się pogrzebać w starym kodzie i sprawdzić.

0

Witam,

Możesz napisać co było problemem bo mam podobny przy wywołaniu funkcji testowej.

0

Zaciągasz WSDLa i masz dostęp do wszystkich klas i metod. Potem coś takiego:

 ElektronicznyNadawca Poczta = new ElektronicznyNadawca();
            System.Net.NetworkCredential c = new System.Net.NetworkCredential();
            c.UserName = userName
            c.Password = password
            System.Net.CredentialCache cc = new System.Net.CredentialCache();
            cc.Add(new Uri("https://e-nadawca.poczta-polska.pl/websrv/en.wsdl"), "Basic", c);
            Poczta.Credentials = cc;

I działają nie tylko tylko testowe ale wszystkie.

0

Teraz sprawdzałeś czy to działa?

0

ta

0
akerman napisał(a):

Zaciągasz WSDLa i masz dostęp do wszystkich klas i metod. Potem coś takiego:

            ElektronicznyNadawca Poczta = new ElektronicznyNadawca();
            System.Net.NetworkCredential c = new System.Net.NetworkCredential();
            c.UserName = userName
            c.Password = password
            System.Net.CredentialCache cc = new System.Net.CredentialCache();
            cc.Add(new Uri("https://e-nadawca.poczta-polska.pl/websrv/en.wsdl"), "Basic", c);
            Poczta.Credentials = cc;

I działają nie tylko tylko testowe ale wszystkie.

Witam. Mam problem z tym powyższym kodem (który jest taki jak w dokumentacji). Używam Visual Studio 2017.
Zaciągnąłem najnowszy serwis WSDL do serwisu o nazwie ServicePost i mam taką funkcję:

static void Main(string[] args)
        {
            ServicePost.ElektronicznyNadawca tEN = new ServicePost.ElektronicznyNadawca();  // 1
            System.Net.NetworkCredential c = new  System.Net.NetworkCredential();
            c.UserName = "user";
            c.Password = "pass";
            System.Net.CredentialCache cc = new System.Net.CredentialCache();
            cc.Add(new Uri("https://e-nadawca.poczta-polska.pl/websrv/en.wsdl"), "Basic", c);
            tEN.Credentials = cc;  // 7

            string test = tEN.hello("test");  // 8
        }

linijka 1: nie może utworzyć obiektu klasy ElektronicznyNadawca gdyż jest to interfejs
linijka 7: w interfejsie ElektronicznyNadawca nie ma pola Credentials
linijka 8: najpierw wyświetla błąd XmlSerializera (przytoczony w pierwszym poście), znalazłem rozwiązanie:

dodanie do pliku Reference.svcmap linijki

<Wrapped>true</Wrapped>

i opcja "Update Service reference"

problem z XmlSerializerem znika za to pojawia się ze zmienionymi argumentami funkcji
hello ma taką postać

Testowa2.ServicePost.helloResponse1 hello(Testowa2.ServicePost.helloRequest request);

i nie wiem co z tym zrobić.

Wszelkie podpowiedzi mile widziane.

Pozdrawiam
Artur

2

Podobnie jak domanciu coś kombinujecie. Podejrzewam, że źle podłączyłeś usługę bo nic tam nie trzeba robić. Wszystko działa jak malowanie. Wywal to co tam podłączyłeś i spróbuj zrobić to jeszcze raz.
Ściągnij sobie ten plik wsdl najpierw na dysk i sprôbuj załadować go z dysku. W VS trzeba tylko podać ścieżkę do niego.
I uwaga jak dajesz Odwołanie do usługi, otwiera Ci się okno w którym jest miejsce na URL ale tam nic nie wpisujesz. Naciskasz Zaawanoeane i dopiero tam wklejasz ten swój adres do pliku.
Wtedy dopiero wszystko ładnie się doda i żadne wrapowanie czy inne kombinacje alpejskie nie będą potrzebne.
Przetestowane przed momentem.

0

Dziękuję za pomoc. Faktycznie po zapisaniu pliku na dysku i dołączeniu jako web service ze ścieżki wszystko działa.

Pozdrawiam
Artur

0
akerman napisał(a):

Podobnie jak domanciu coś kombinujecie. Podejrzewam, że źle podłączyłeś usługę bo nic tam nie trzeba robić. Wszystko działa jak malowanie. Wywal to co tam podłączyłeś i spróbuj zrobić to jeszcze raz.
Ściągnij sobie ten plik wsdl najpierw na dysk i sprôbuj załadować go z dysku. W VS trzeba tylko podać ścieżkę do niego.
I uwaga jak dajesz Odwołanie do usługi, otwiera Ci się okno w którym jest miejsce na URL ale tam nic nie wpisujesz. Naciskasz Zaawanoeane i dopiero tam wklejasz ten swój adres do pliku.
Wtedy dopiero wszystko ładnie się doda i żadne wrapowanie czy inne kombinacje alpejskie nie będą potrzebne.
Przetestowane przed momentem.

Dzięki, też miałem problem z importowaniem WSDL od Poczty Polskiej.
Szkoda tylko, że niestety pod .NET Core już nie ma możliwości używania SOAP-owych serwisów (te nowsze to jeszcze tak, tych starszego typu, już nie).

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