SQL Server 2025 CU6 - dlaczego sp_invoke_external_rest_endpoint kończy się błędem HRESULT 0x80072F0C tylko dla konkretnego hosta HTTPS?
Produkt
Microsoft SQL Server 2025 Standard Developer Edition Wersja: 17.0.4055.5 (RTM-CU6) Windows Server 2025 Standard Evaluation, kompilacja 26100
Opis problemu
Występuje problem z procedurą sp_invoke_external_rest_endpoint.
Procedura poprawnie komunikuje się z kilkoma endpointami HTTPS, w tym z endpointami uwierzytelniania oraz z innym środowiskiem tej samej aplikacji, ale konsekwentnie kończy się błędem podczas łączenia z jednym konkretnym hostem HTTPS.
Błąd występuje zanim zostanie zwrócona jakakolwiek odpowiedź HTTP.
Błąd SQL Server:
Msg 31608, Level 16, State 24 Wystąpił błąd, nie udało się skomunikować z zewnętrznym endpointem REST. HRESULT: 0x80072F0C
Odtworzenie problemu
Problem można odtworzyć za pomocą poniższego minimalnego przykładu:
DECLARE @Response nvarchar(max);
EXEC msdb.dbo.sp_invoke_external_rest_endpoint @url = N'https://polon2.opi.org.pl/', @method = N'GET', @response = @Response OUTPUT;
SELECT @Response;
Wynik:
Msg 31608, Level 16,
State 24 An error occurred, failed to communicate with the external rest endpoint.
HRESULT: 0x80072F0C
Ten sam błąd występuje niezależnie od:
- nagłówków,
- autoryzacji,
- payloadu,
- endpointu,
- ścieżki.
Na przykład wszystkie poniższe adresy URL kończą się błędem:
https://polon2.opi.org.pl/
https://polon2.opi.org.pl/xyz
https://polon2.opi.org.pl/employees-api/...
Środowisko
Microsoft SQL Server 2025 (RTM-CU6) 17.0.4055.5 (X64) Windows Server 2025 Standard Evaluation Kompilacja 26100
Oczekiwany rezultat
Procedura powinna nawiązać połączenie HTTPS i zwrócić odpowiedź HTTP, na przykład HTTP 301 dla „/”.
Rzeczywisty rezultat
Połączenie HTTPS kończy się niepowodzeniem, zanim zostanie odebrana odpowiedź HTTP. SQL Server zgłasza HRESULT 0x80072F0C.
Wyniki diagnostyki
Wykonano już następujące czynności diagnostyczne.
1. Rozwiązywanie DNS
Zakończone powodzeniem.
2. Łączność TCP
Przy użyciu ProcMon:
TCP Connect Result: SUCCESS sqlservr.exe -> 195.187.108.61:443
Połączenie TCP zostaje nawiązane poprawnie.
3. Windows Schannel
Łańcuch certyfikatu serwera jest prawidłowy.
Środowiska produkcyjne i demo prezentują dokładnie ten sam łańcuch certyfikatów:
*.opi.org.pl Certum OV TLS G2 R39 CA -> Certum Trusted Root CA
4. Proxy WinHTTP
netsh winhttp show proxy
Direct access (no proxy server)
Nie skonfigurowano żadnego proxy.
5. curl.exe
Uruchomiono na tym samym serwerze, na którym działa SQL Server:
curl.exe https://polon2.opi.org.pl/
zwraca:
HTTP/1.1 301 Moved Permanently
oraz:
curl.exe z nagłówkami Authorization: Bearer ... oraz institution: ...
dla adresu:
https://polon2.opi.org.pl/employees-api/...
zwraca:
HTTP/1.1 200 OK
6. PowerShell / .NET
Przy użyciu SslStream oraz HttpClient negocjacja TLS kończy się powodzeniem.
7. Endpoint REST SQL Server
Poniższe endpointy działają poprawnie przy użyciu sp_invoke_external_rest_endpoint:
endpoint uwierzytelniania
oraz:
https://polon2-demo.opi.org.pl/
Problem występuje wyłącznie dla:
8. Konfiguracja SQL Server
external rest endpoint enabled = 1
9. Wersja SQL Server
Problem występuje na:
SQL Server 2025 CU6 - 17.0.4055.5
To samo zachowanie zaobserwowano wcześniej na wersji RTM.
Obserwacje
Problem wydaje się być specyficzny dla klienta HTTP używanego wewnętrznie przez sp_invoke_external_rest_endpoint, ponieważ:
- curl działa poprawnie,
- PowerShell działa poprawnie,
- .NET działa poprawnie,
- SQL Server działa poprawnie dla innych hostów HTTPS,
- błąd występuje tylko dla tego jednego hosta.
Problem pojawia się nawet dla zwykłego żądania GET bez uwierzytelniania.
Prośba
Proszę o zbadanie, dlaczego sp_invoke_external_rest_endpoint kończy się błędem HRESULT 0x80072F0C podczas łączenia z „https://polon2.opi.org.pl”, podczas gdy innymi klientami HTTP systemu Windows, na tej samej maszynie poprawnie nawiązują TLS i komunikują się z tym endpointem.