GUS API i .NET Core

GUS API i .NET Core
lukaszek016
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad rok
  • Postów:249
0

Witam.

Czy robił ktoś może integrację z BIR REGON korzystając z .NET Core lub .NET Standard? Próbuję to zrobić, tak, jak robiłem w .NET Framework czyli poprzez dodanie Connected Services i korzystanie z wygenerowanych metod. Problem polega na tym, że kodowanie przy komunikacji z ich API musi być w MTOM, czego teoretycznie .NET Core i .NET Framework nie obsługują. Poprzednio kodowania ustawiałem na obiekcie klasy WsHttpBinding, niestety teraz ta klasa nie jest dostępna, a w CustomHttpBinding tego kodowania też nie mogę ustawić. Czy pozostaje mi normalnie Postem wysyłać w stringach wysyłać XMLe ręcznie?

Paweł Opiela
  • Rejestracja:około 6 lat
  • Ostatnio:prawie 4 lata
  • Postów:3
0

W Net standard MTOM działa poprawnie

Kopiuj
            GusServices.UslugaBIRzewnPublClient bir = new GusServices.UslugaBIRzewnPublClient();
            bir.Endpoint.Address = new System.ServiceModel.EndpointAddress(@"https://wyszukiwarkaregon.stat.gov.pl/wsBIR/UslugaBIRzewnPubl.svc");

            System.ServiceModel.WSHttpBinding binding = (System.ServiceModel.WSHttpBinding)bir.Endpoint.Binding;
            binding.Security.Mode = System.ServiceModel.SecurityMode.Transport;
            binding.Security.Transport.ClientCredentialType = System.ServiceModel.HttpClientCredentialType.None;
            binding.MessageEncoding = System.ServiceModel.WSMessageEncoding.Mtom;

            string sid = bir.Zaloguj(<Klucz>);
            OperationContextScope scope = new OperationContextScope(bir.InnerChannel);

            HttpRequestMessageProperty requestProperties = new HttpRequestMessageProperty();
            requestProperties.Headers.Add("sid", sid);
            OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = requestProperties;

            GusServices.ParametryWyszukiwania nipData = new GusServices.ParametryWyszukiwania();
            nipData.Nip = <Nip do szukania>

                   string daneSzukajResponse = "";
                    try
                    {
                        daneSzukajResponse = bir.DaneSzukaj(nipData);
                    }
                    catch 
                    {
                        return
                    }

                    try {
                        DaneSzukaj.root daneSzukaj = null;
                        using (var reader = new StringReader(daneSzukajResponse))
                        {
                            XmlSerializer daneSzukajSerializer = new XmlSerializer(typeof(DaneSzukaj.root));
                            daneSzukaj = (DaneSzukaj.root)daneSzukajSerializer.Deserialize(reader);
                        }

                      }

wynik masz w daneSzukaj

edytowany 1x, ostatnio: Paweł Opiela
Paweł Opiela
  • Rejestracja:około 6 lat
  • Ostatnio:prawie 4 lata
  • Postów:3
0

Jeżeli chcesz to zrobić w Net Core to chyba najprościej zrobić to ręcznie.
Aktualnie jestem w trakcie pisania kodu obsługującego zapytanie do GUS w NetCore. Jeżeli byś chciał to pisz bezpośrednio.

S2
  • Rejestracja:ponad 7 lat
  • Ostatnio:prawie 3 lata
  • Postów:7
0
Paweł Opiela napisał(a):

Jeżeli chcesz to zrobić w Net Core to chyba najprościej zrobić to ręcznie.
Aktualnie jestem w trakcie pisania kodu obsługującego zapytanie do GUS w NetCore. Jeżeli byś chciał to pisz bezpośrednio.

Czy udało Ci się pobrać dane z GUS w .Net Core?
Zamiast WSHttpBinding użyłem NetHttpBinding

Kopiuj
NetHttpBinding binding = new NetHttpBinding();
binding.Security.Mode = BasicHttpSecurityMode.Transport;
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
binding.MessageEncoding = NetHttpMessageEncoding.Mtom;

Dostaję komunikat:
System.NotSupportedException: The value 'Mtom' is not supported in this context for the binding property 'MessageEncoding'.

S1
Czy udało Ci się rozwiązać ten problem? Bo z tym samym się borykam
S2
@sebox1996 Niestety w .Net Core nie udało mi się :( przeszedłem na .Net Frameworka użyłem WSHttpBinding
Paweł Opiela
  • Rejestracja:około 6 lat
  • Ostatnio:prawie 4 lata
  • Postów:3
0

Jak wyżej wspomniałem trzeba sobie ręcznie przygotować paczkę i nie ma żadnego problemu z pobraniem danych.

DR
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 4 lata
  • Postów:1
2

Wystarczy dodać paczkę https://www.nuget.org/packages/WcfCoreMtomEncoder

        var encoding = new MtomMessageEncoderBindingElement(new TextMessageEncodingBindingElement());
        var transport = new HttpsTransportBindingElement();

        var customBinding = new CustomBinding(encoding, transport);
        bir.Endpoint.Binding = customBinding;
Adriana Maszorek
Adriana Maszorek
  • Rejestracja:prawie 2 lata
  • Ostatnio:prawie 2 lata
  • Postów:1
0

Mam podobny problem podczas łączenia z API ZUS.
Korzystam właśnie z ww paczki https://www.nuget.org/packages/WcfCoreMtomEncoder i dostaję błąd "The size necessary to buffer the XML content exceeded the buffer quota."

Czy komuś udało się pobrać dane klientem napisanym w .NET Core lub .NET Standard?

AM
  • Rejestracja:prawie 2 lata
  • Ostatnio:prawie 2 lata
  • Postów:1
0

Działa dla poniższych ustawień TransferMode.Streamed.

Kopiuj
 var encoding = new MtomMessageEncoderBindingElement(new TextMessageEncodingBindingElement());
 encoding.MessageVersion = MessageVersion.Soap12WSAddressingAugust2004;
 var transport = new HttpsTransportBindingElement();
 transport.TransferMode = TransferMode.Streamed;
 var customBinding = new CustomBinding(encoding, transport);

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.