Azure Function Proxy Internal Server Error 500 dari SocketException
Saya memiliki Fungsi Azure yang menggunakan proxy dan meneruskan ke fungsi biru lainnya sebagai backend. Ada titik akhir / api / ping yang menerima GET. Ketika saya mengirim HTTP-GET untuk melakukan ping, saya kadang-kadang mendapatkan Kesalahan Server Internal 500 yang salah di mana saya hanya melihat permintaan pada proxy tetapi saya tidak melihat permintaan pada fungsi eksekusi kode backend.
Saya menambahkan tajuk "Proxy-Trace-Enabled" untuk "true" ke tajuk untuk melacak hasilnya. Saya memiliki hasil di folder D: \ home \ LogFiles \ Application \ Proxies \ DetailedTrace saya. Di sana, log untuk permintaan yang gagal berisi objek json "Backend" dengan yang berikut ini
{
"source": "forward-request",
"timestamp": "2020-08-20T15:42:20.8272145Z",
"elapsed": "00:00:00.0061051",
"data": {
"messages": [
"Only one usage of each socket address (protocol/network address/port) is normally permitted Only one usage of each socket address (protocol/network address/port) is normally permitted",
"Only one usage of each socket address (protocol/network address/port) is normally permitted",
"Only one usage of each socket address (protocol/network address/port) is normally permitted"
]
}
}
Saya yakin ini adalah Azure Functions 1.0 di DotNet, tapi sudah lama dibuat. Mengapa proxy Azure Function sederhana saya memberikan kesalahan server internal yang tidak diteruskan ke kode backend saya untuk dieksekusi?
Untuk referensi tentang cara melacak permintaan
Jawaban
Ada ambang Koneksi TCP untuk Paket Layanan Aplikasi Fungsi Azure yang berkorelasi dengan koneksi soket. Dokumentasinya ada di blog yang akan saya tautkan di sini. Ada pertanyaan serupa di TCP / Port Exhaustion yang menggunakan korelasi serupa antar masalah . Meskipun pengecualian yang dilaporkan berbeda, kesalahan hilang dalam pengujian saya saat meningkatkan layanan aplikasi yang aktif.
Contoh: Saya memiliki 2 Azure Functions, FunctionA dan FunctionB. FunctionA adalah proxy dan tanpa eksekusi backend di App Service Plan P1. FunctionB adalah fungsi yang tidak berkorelasi tetapi dijalankan pada App Service Plan P1 yang sama.
Kesalahan FunctionA di bawah App Service Plan P1 dengan masalah Internal 500 Server Error saat dipanggil. Dilaporkan sebagai Faulted in App Insights, dan dilacak di log backend sebagai pengecualian soket.
Saya membuat ulang Azure Function, FunctionA, di App Service Plan P3. FunctionA tidak menerima 500 Kesalahan Server Internal. Namun itu tidak membutuhkan skala rencana pembayaran P3. Jadi saya pindahkan kembali ke P1. Kesalahan server terjadi lagi.
FunctionB berada di App Service Plan yang sama dengan FunctionA (P1). Metrik Pemantauan Azure menyimpulkan 4.200 SocketOutboundAll per menit. Saya memindahkan (menghapus dan membuat ulang) FunctionB dari P1 ke P3. Saya Tetap BerfungsiA pada P1. Kesalahan SocketOutboundAll telah dihilangkan dari FunctionA pada P1. Fungsi pada P3 App Service Plan juga tidak melaporkan pengecualian apa pun.