Sign in

Using jq

Output


ตัวอย่าง

ต้องการให้ User ใส่ Token เพื่อใช้ในคำสั่งถัดไป

  1. เพิ่มไฟล์ download.cmd

2. รัน Script ด้วยคำสั่ง

3. ใส่ Token เช่น abc เพื่อสำหรับคำสั่ง wk-asset-downloader

> dotnet wk-asset-downloader wk-j/project --token abc

ตัวอย่าง แสดง Create statement ของตาราง alf_child_assoc

ผลลัพธ์


ขั้นตอน

  1. เพิ่ม Property ในไฟล์ .csproj

2. Build โปรแกรมด้วยคำสั่ง dotnet build

3. ตรวจสอบ Output โดยเข้าไปที่โฟลเดอร์ obj/Generatedของโปรเจค


ขั้นตอน

  1. สร้างโปรเจคชื่อ MyApp โดยในไฟล์​ Program.cs ให้เพิ่มฟังก์ชันต่อไปนี้

จากโค้ดจะเห็นว่า GetResource1() และ ReadFile() มีโอกาศเกิด Memory Leak เนื่องจากไม่มีการเรียกฟังก์ชัน Dispose() (ผ่าน using statement)

2. เพิ่ม GitHub Actions โดยสร้างไฟล์ .github/workflows/Infer.yaml

3. ทดสอบโดย Push โค้ดขึ้น GitHub แล้วเข้าไปที่แท็บ Actions

4. คลิกที่ Run Infer# จะพบว่าโปรแกรมตรวจเจอ Memory leak ทั้งหมด 2 Issue ตรงกับฟังก์ชันในไฟล์ Program.cs บรรทัดที่ 8 และบรรทัดที่ 22


ตัวอย่าง

  1. สร้าง Downstream API ที่สามารถกำหนด Delay เพื่อให้ API response ตามเวลาที่ต้องการ

2. เพิ่ม ocelot.v1.json โดยกำหนด Route ชี้ไปที่ Downstream ดังนี้

3. ทดสอบโดยกำหนด Delay เป็น 1 และ 2 นาที

จากการทดสอบ จะพบว่าเมื่อเรียก API โดยเพิ่ม Delay เป็น 2 นาที Ocelot จะ Return 499 CLIENT CLOSED REQUEST แทนที่จะเป็น 200 OK

สาเหตุ

เกิดจากใน Ocelot มีการกำหนด Default Timeout ของ HttpClient ไว้ที่ 90 วินาที ถ้า Downstream ทำงานช้ากว่านี้ Ocelot จะยกเลิก Request และ Return 499 ไปยัง Client

วิธีแก้

ให้ Override timeout โดยปรับที่ QosOptions.TimeoutValue เช่น ปรับเป็น 3 นาที

ทดสอบอีกครั้ง


ตัวอย่าง

มี 2 โปรเจคที่ Target netcoreapp2.1 แต่โปรเจคที่ 2 มีการระบุ Runtime เป็น win7-x64 และมี Reference ไปหาโปรเจคแรก

เมื่อ Build โปรเจค MyWindowsWeb.csproj จะเกิด Error ต่อไปนี้

สาเหตุ

เกิดจากการ Build โปรเจคแบบ Self-contained เช่น ระบุ RuntimeIdentifier เป็น win7-x64 โปรแกรมจะ Build และใช้ Runtime เวอร์ชันล่าสุด เช่น Microsoft.AspNetCore.App/2.1.23 เพื่อให้ได้ Patch ใหม่สุดสำหรับ Deploy

ปัญหาคือ .NET จะปรับเวอร์ชัน Runtime เฉพาะโปรแกรมที่กำลัง Build คือ MyWindowsWeb.csproj เท่านั้น ส่วนโปเจคที่ Reference ถึง ยังใช้ Runtime เวอร์ชันปัจจุบันที่ติดตั้งในเครื่อง ซึ่งจะทำให้ 2 โปรเจคมีเลขเวอร์ชัน Runtime ไม่ตรงกัน

วิธีแก้

ให้ปรับ Property TargetLatestRuntimePatch เป็น true เพื่อให้ทั้ง 2 โปรเจคใช้ Runtime เวอร์ชันล่าสุดเสมอ


ตัวอย่าง การโหลดโฟล์ Config ที่มีการ Map route ของ API ต่าง ๆ จากโฟลเดอร์ __ocelot__

ขั้นตอน

  1. สร้างโฟลเดอร์ __ocelot__ ประกอบด้วย Config 2 ไฟล์ คือ ocelot.A.json และ ocelot.B.json

2. เรียก Extension method ชื่อ AddOcelot() ในขั้นตอนการสร้าง WebHost โดยใส่ชื่อโฟลเดอร์ __ocelot__ เป็นพารามิเตอร์

3. แก้ไขไฟล์ csproj เพื่อ Copy โฟลเดอร์__ocelot__ ไปยังปลายทางขณะ Build และ Publish

4. ทดสอบ โดยรันโปรแกรมและเรียก API ต่อไปนี้

จะพบว่าสามารถเรียกข้อมูลจาก API ที่ถูก Config ไว้ทั้ง 2 ที่ คือ ocelot.A.json และ ocelot.B.json

wk

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store