PRN232Chưa đoKỳ 8Chuyên ngành Cập nhật 28/07/2026

PRN232 - Xây dựng ứng dụng back-end đa nền tảng với .NET

PRN232 - Xây dựng ứng dụng back-end đa nền tảng với .NET là môn học xây dựng RESTful Web API bằng C# 12 và .NET 8 trên nền ASP.NET Core. Ngân hàng câu hỏi trắc nghiệm PRN232 có giải thích bao quát trọn bộ chương trình: nhập môn ASP.NET Core và RESTful Service (ràng buộc REST, tính phi trạng thái, giao thức HTTP, request line, mã trạng thái 200 OK, Kestrel, Swagger và OpenAPI, MapControllers, middleware trong Program.cs), Models trong Web API với Entity Framework Core (DbContext, DbSet, LINQ và ToListAsync, POCO, Repository Pattern, Data Transfer Object, AutoMapper, tránh trả thẳng entity ra client), Media Formatters và Content Negotiation (InputFormatter và OutputFormatter, TextInputFormatter, header Accept và Content-Type, hệ số ưu tiên q, application/json, application/xml, text/csv, serialization và deserialization), Binding - Validation - Routing (Model Binder, binding source parameter inference, FromBody, FromQuery, FromRoute, FromHeader, attribute routing, tham số route, Data Annotations với Required, StringLength, EmailAddress, RegularExpression, ApiController và ModelState.IsValid, trả về 400 Bad Request và NotFound), OData trong ASP.NET Core Web API (gói Microsoft.AspNetCore.OData, ODataConventionModelBuilder, Entity Data Model, Entity Set, các tuỳ chọn truy vấn $filter, $select, $expand, $orderby, $count, $skip, $top, endpoint $metadata, hàm endswith), bảo mật RESTful Web Service (ASP.NET Core Identity, JSON Web Token với ba phần Header - Payload - Signature, UseAuthentication và UseAuthorization, header Authorization dạng Bearer, thuộc tính Authorize theo Roles, HTTPS, xác thực và phân quyền), JavaScript Client và AJAX (jQuery, cú pháp $(selector).action(), $.ajax, $.get, $.post, phương thức .on() và event delegation, Same-Origin Policy, CORS, JSON hợp lệ, XML well-formed), xây dựng dịch vụ với WCF và CoreWCF (ServiceContract, OperationContract, endpoint ABC gồm Address - Binding - Contract, AddServiceModelServices, host trong ASP.NET Core dưới dạng middleware) và gRPC Service (Protocol Buffers, file .proto, HTTP/2, GrpcChannel, ServerCallContext, streaming hai chiều, Server Push), khép lại bằng kiến trúc Microservices (API Gateway, Ocelot, Docker, giao tiếp đồng bộ và bất đồng bộ, cơ sở dữ liệu riêng cho từng service, runtime coupling). Tài liệu ôn thi FE dành cho sinh viên FPT University.

115Câu hỏi
3Bộ đề
10Chủ đề
5,01 đánh giá

Câu hỏi của môn

104/115 câuCòn 11
85Consider this simple CoreWCF service contract4 lựa chọncó codeKhó33% trả lời đúng
Đề bài
for a .NET 9 application: [ServiceContract] public interface IGreeterService {
  [OperationContract] string Greet(string name);
}

Which part defines what the service does?

A[ServiceContract]
Bpublic interface IGreeterService
C[OperationContract]
Dstring Greet(string name);
Lời giải
Phần định nghĩa chức năng của dịch vụ là phương thức Greet trong interface IGreeterService. Phương thức này có nhiệm vụ nhận vào một tham số tên và trả về một chuỗi thông điệp chào đón. Điều này được thể hiện rõ ràng qua cách sử dụng từ khóa 'string' để định nghĩa kiểu dữ liệu trả về và tham số 'name' để nhận vào thông tin tên của người dùng. Phương thức này được sử dụng trong giao tiếp giữa client và server để thực hiện chức năng chào đón.
Mở trang câu hỏi này →
AEndpoints defined by ABC
BDirect database connections
COnly files
DShared memory
Lời giải
Trong WCF, các dịch vụ và khách hàng giao tiếp thông qua các điểm kết thúc được định nghĩa bởi ABC. Các điểm kết thúc được định nghĩa bởi ABC là các điểm kết thúc được sử dụng để giao tiếp giữa các dịch vụ và khách hàng. Các điểm kết thúc này có thể được định nghĩa bằng cách sử dụng các thuộc tính của dịch vụ, chẳng hạn như phương thức giao tiếp, giao thức và địa chỉ. Các điểm kết thúc được định nghĩa bởi ABC cho phép các dịch vụ và khách hàng giao tiếp với nhau một cách an toàn và đáng tin cậy. Ngoài ra, các điểm kết thúc được định nghĩa bởi ABC cũng cho phép các dịch vụ và khách hàng giao tiếp với nhau qua mạng, cho phép các ứng dụng phân tán được xây dựng.
Mở trang câu hỏi này →
A[Service]
B[WebContract]
C[WcfContract]
D[ServiceContract]
Lời giải
Trong WCF, thuộc tính được sử dụng để đánh dấu một giao diện là một hợp đồng dịch vụ là [ServiceContract]. Đây là thuộc tính quan trọng trong WCF, giúp xác định giao diện nào sẽ được sử dụng như một dịch vụ. Khi một giao diện được đánh dấu bằng [ServiceContract], nó sẽ được WCF sử dụng để tạo ra một dịch vụ có thể được gọi từ xa. Điều này cho phép các ứng dụng khác nhau giao tiếp với nhau thông qua dịch vụ này. Ngoài ra, thuộc tính [ServiceContract] cũng giúp xác định các phương thức nào sẽ được sử dụng trong dịch vụ.
Mở trang câu hỏi này →
AIn a Windows Service only.
BWithin an ASP.NET Core application as middleware.
CIn a separate process managed by SvcUtil.exe.
DAs a standalone executable that cannot be hosted in a web server.
Lời giải
Một dịch vụ CoreWCF thường được lưu trữ trong một ứng dụng ASP.NET Core như middleware. Điều này khác với các dịch vụ WCF truyền thống được lưu trữ trong IIS. Khi sử dụng CoreWCF, bạn có thể lưu trữ dịch vụ của mình trong một ứng dụng ASP.NET Core và sử dụng nó như một middleware. Điều này cho phép bạn dễ dàng quản lý và cấu hình dịch vụ của mình. Ngoài ra, việc lưu trữ dịch vụ trong ứng dụng ASP.NET Core cũng cho phép bạn tận dụng các tính năng của ASP.NET Core, chẳng hạn như khả năng tự động hóa và giám sát. Tóm lại, lưu trữ dịch vụ CoreWCF trong ứng dụng ASP.NET Core như middleware là một cách phổ biến và linh hoạt để triển khai dịch vụ của mình.
Mở trang câu hỏi này →
AAction, Behavior, Contract
BAddress, Binding, Contract
CAsynchronous, Buffered, Connection
DAuthentication, Authorization, Communication
Lời giải
Trong WCF, 'ABC' của một endpoint được viết tắt bởi ba từ khóa quan trọng. 'A' đứng cho 'Address', đó là địa chỉ của endpoint. Địa chỉ này có thể là một URL hoặc một địa chỉ IP. 'B' đứng cho 'Binding', đó là cách thức kết nối giữa client và server. Binding xác định các thông số như giao thức truyền tải, giao thức bảo mật và giao thức truyền thông. 'C' đứng cho 'Contract', đó là giao dịch hoặc dịch vụ được cung cấp bởi endpoint. Contract xác định các phương thức và dữ liệu được truyền qua giao dịch.
Mở trang câu hỏi này →
90What is CoreWCF?4 lựa chọn
AA complete rewrite of WCF with a different architecture and programming model.
BA port of WCF to .NET (Core) and .NET 5+ that allows existing WCF services to be migrated to modern, cross-platform environments.
CA client-only library for consuming legacy WCF services.
DA graphical tool for managing WCF services.
Lời giải
CoreWCF là một công nghệ cho phép di chuyển các dịch vụ WCF hiện có sang môi trường hiện đại, đa nền tảng. Nó là một phiên bản được tối ưu hóa cho .NET Core và .NET 5+, cho phép các nhà phát triển dễ dàng chuyển đổi và sử dụng các dịch vụ WCF cũ trong các ứng dụng mới. CoreWCF cung cấp một kiến trúc và mô hình lập trình mới, giúp giảm thiểu các vấn đề liên quan đến bảo trì và mở rộng. Điều này giúp các nhà phát triển có thể tập trung vào việc phát triển các ứng dụng mới, thay vì phải lo lắng về việc duy trì các dịch vụ cũ. CoreWCF cũng hỗ trợ các tính năng mới như khả năng tương tác với các nền tảng khác nhau và khả năng mở rộng dễ dàng.
Mở trang câu hỏi này →
Abuilder.Services.AddWcfServices();
Bbuilder.Services.AddServiceModelServices();
Cbuilder.Services.AddCoreWCF();
Dbuilder.Services.AddNetTcp();
Lời giải
Để thêm các dịch vụ CoreWCF cần thiết vào bộ chứa dependency injection trong Program.cs, bạn cần sử dụng phương thức AddServiceModelServices(). Phương thức này được sử dụng để thêm các dịch vụ WCF vào bộ chứa dependency injection, cho phép ứng dụng sử dụng các dịch vụ WCF trong quá trình chạy. Phương thức này là một phần quan trọng của quá trình cấu hình ứng dụng và cần được sử dụng đúng cách để đảm bảo ứng dụng hoạt động đúng cách.
Mở trang câu hỏi này →
AIt only supports communication over HTTP.
BIt unifies several older Microsoft communication technologies (like ASMX, .NET Remoting, MSMQ) into a single programming model.
CIt is designed exclusively for building RESTful services.
DIt can only be consumed by .NET clients.
Lời giải
WCF (Windows Communication Foundation) là một công nghệ giao tiếp của Microsoft, được thiết kế để cung cấp một mô hình lập trình thống nhất cho các công nghệ giao tiếp cũ hơn của Microsoft, chẳng hạn như ASMX, .NET Remoting, MSMQ. Điều này có nghĩa là WCF cho phép các ứng dụng giao tiếp với nhau thông qua các giao thức khác nhau, bao gồm HTTP, TCP, UDP, v.v. Mô hình lập trình thống nhất này giúp giảm thiểu sự phức tạp và tăng cường khả năng tương tác giữa các ứng dụng.
Mở trang câu hỏi này →
ATCP
BHTTP
CNamed Pipes
DMSMQ
Lời giải
WCF có thể sử dụng các giao thức khác nhau để lộ các dịch vụ RESTful. Trong số các lựa chọn trên, giao thức HTTP là một trong những giao thức phổ biến nhất được sử dụng để lộ các dịch vụ RESTful. Giao thức HTTP cung cấp các phương thức như GET, POST, PUT và DELETE để tương tác với các dịch vụ RESTful. Ngoài ra, giao thức HTTP cũng hỗ trợ các tiêu chuẩn như HTTP/1.1 và HTTP/2 để tăng hiệu suất và khả năng mở rộng. Các giao thức khác như TCP, Named Pipes và MSMQ cũng có thể được sử dụng để lộ các dịch vụ WCF, nhưng chúng không phải là lựa chọn phổ biến nhất cho các dịch vụ RESTful.
Mở trang câu hỏi này →
95A key difference between gRPC and a typical RESTful HTTP API is:4 lựa chọnDễ100% trả lời đúng
AREST APIs are strictly-typed, while gRPC is loosely-typed.
BgRPC APIs are defined by a formal contract (.proto file), while REST APIs often rely on documentation (like OpenAPI) that is separate from the implementation.
CgRPC can only be used for internal, server-to-server communication.
DREST APIs support streaming, while gRPC does not.
Lời giải
Một trong những điểm khác biệt chính giữa gRPC và một API HTTP REST thông thường là cách định nghĩa và quản lý các dịch vụ API. gRPC sử dụng một hợp đồng chính thức (.proto file) để định nghĩa các dịch vụ API, trong khi các API HTTP REST thường dựa vào tài liệu (như OpenAPI) riêng biệt với triển khai. Điều này giúp cho gRPC cung cấp tính nhất quán và bảo mật cao hơn trong việc triển khai và sử dụng các dịch vụ API. Ngoài ra, việc sử dụng hợp đồng chính thức cũng giúp cho gRPC hỗ trợ các tính năng như mã hóa và xác thực tự động, giúp tăng cường bảo mật cho các dịch vụ API.
Mở trang câu hỏi này →
96gRPC is built on top of which underlying transport protocol?4 lựa chọnDễ75% trả lời đúng
ATCP/IP directly
BHTTP/1.1
CUDP
DHTTP/2
Lời giải
gRPC được xây dựng trên nền tảng của giao thức truyền tải nào? gRPC sử dụng giao thức HTTP/2 làm giao thức truyền tải cơ bản. Điều này cho phép gRPC tận dụng các tính năng của HTTP/2 như hỗ trợ nhiều luồng truyền tải, hỗ trợ các tính năng như server push, và hỗ trợ các tính năng khác. gRPC cũng có thể hoạt động trên các giao thức khác như TCP/IP trực tiếp, HTTP/1.1, UDP, nhưng giao thức HTTP/2 là giao thức được khuyến nghị và được sử dụng rộng rãi nhất.
Mở trang câu hỏi này →
AXML
BJSON
CProtocol Buffers
DYAML
Lời giải
gRPC thường sử dụng định dạng serialize nào mặc định? gRPC là một framework giao tiếp mạng được thiết kế để xây dựng các ứng dụng phân tán. Nó thường sử dụng định dạng serialize Protocol Buffers mặc định. Protocol Buffers là một định dạng serialize được thiết kế bởi Google, nó cho phép định nghĩa các cấu trúc dữ liệu và serialize chúng thành các byte array. Điều này giúp giảm thiểu kích thước dữ liệu và tăng tốc độ truyền dữ liệu. Ngoài ra, Protocol Buffers cũng hỗ trợ các tính năng như tính nhất quán và khả năng mở rộng, giúp dễ dàng triển khai và bảo trì các ứng dụng gRPC.
Mở trang câu hỏi này →
AJSON has a richer set of built-in data types, including Date and Guid.
BProtobuf has a well-defined, language-agnostic set of scalar types, and data is validated against this schema during serialization.
CJSON does not distinguish between integers and floating-point numbers.
DProtobuf uses strings for all data types.
Lời giải
Protobuf và JSON là hai định dạng dữ liệu khác nhau trong việc xử lý kiểu dữ liệu. Protobuf có một bộ sưu tập kiểu dữ liệu scalar được định nghĩa rõ ràng và không phụ thuộc vào ngôn ngữ lập trình, và dữ liệu được xác thực dựa trên lược đồ này khi thực hiện quá trình serialize. Điều này giúp đảm bảo tính toàn vẹn và chính xác của dữ liệu trong quá trình truyền tải. Ngược lại, JSON không có bộ sưu tập kiểu dữ liệu được định nghĩa rõ ràng như Protobuf, và dữ liệu được xác thực dựa trên cấu trúc dữ liệu được định nghĩa trong mã nguồn.
Mở trang câu hỏi này →
Avar client = new HttpClient();
Bvar channel = GrpcChannel.ForAddress("https://localhost:5001"); var client = new Greeter.GreeterClient(channel);
Cvar client = new Greeter.GreeterStub("https://localhost:5001");
Dvar client = GrpcClient.Create<GreeterClient>("https://localhost:5001");
Lời giải
Để tạo một client gRPC trong ứng dụng console .NET 8, bạn cần sử dụng thư viện gRPC .NET. Đầu tiên, bạn cần thêm gói gRPC .NET vào dự án của mình. Sau đó, bạn cần tạo một đối tượng kênh gRPC bằng cách sử dụng phương thức GrpcChannel.ForAddress(). Phương thức này sẽ tạo một kênh gRPC kết nối đến địa chỉ server gRPC. Sau khi tạo kênh gRPC, bạn có thể tạo một client gRPC bằng cách sử dụng lớp Greeter.GreeterClient và truyền đối tượng kênh gRPC vào trong nó. Điều này cho phép client gRPC giao tiếp với server gRPC.
Mở trang câu hỏi này →
AAlways.
BNever; the client and server can read and write in any order, their streams operate independently.
COnly if the client explicitly signals it has finished writing.
DThis is configured by the wait_for_client option in the .proto file.
Lời giải
Trong cuộc gọi streaming hai chiều, khi nào thì máy chủ chờ đợi khách hàng gửi tất cả các tin nhắn trước khi gửi tin nhắn của nó? Câu trả lời đúng là "Không bao giờ; khách hàng và máy chủ có thể đọc và viết theo bất kỳ thứ tự nào, các luồng của họ hoạt động độc lập". Điều này có nghĩa là trong một cuộc gọi streaming hai chiều, khách hàng và máy chủ có thể đọc và viết các luồng dữ liệu của họ mà không cần chờ đợi nhau. Điều này cho phép khách hàng và máy chủ tương tác với nhau một cách linh hoạt và hiệu quả hơn. Tuy nhiên, điều này cũng có thể dẫn đến tình huống phức tạp khi khách hàng và máy chủ cần đồng bộ hóa các luồng dữ liệu của họ.
Mở trang câu hỏi này →
AWhen building a browser-based client application that needs to directly call the API without a proxy layer.
BFor high-throughput, low-latency communication between microservices.
CWhen a strict, language-agnostic contract is required.
DWhen bi-directional streaming is a core requirement.
Lời giải
Một API RESTful HTTP/JSON truyền thống phù hợp hơn với gRPC trong trường hợp xây dựng một ứng dụng khách dựa trên trình duyệt cần gọi trực tiếp API mà không cần một lớp trung gian proxy. Điều này là vì API RESTful HTTP/JSON dễ dàng được truy cập từ trình duyệt web thông qua các phương thức HTTP như GET, POST, PUT và DELETE. Trong khi đó, gRPC yêu cầu sử dụng các phương thức RPC (Remote Procedure Call) và giao thức HTTP/2, điều này có thể gây khó khăn khi truy cập từ trình duyệt web. Ngoài ra, API RESTful HTTP/JSON cũng dễ dàng được tích hợp với các công cụ và thư viện khác nhau, giúp dễ dàng xây dựng và quản lý ứng dụng.
Mở trang câu hỏi này →
Apublic override Task<HelloReply> SayHello(HelloRequest request)
Bpublic virtual HelloReply SayHello(HelloRequest request, ServerCallContext context)
Cpublic override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context)
Dpublic Task SayHello(HelloRequest request, HelloReply reply)
Lời giải

Để thực hiện SayHello RPC, bạn phải ghi đè phương thức nào trong lớp dịch vụ C# của mình? Trong khi xây dựng một dịch vụ RPC, bạn cần phải ghi đè phương thức SayHello để thực hiện chức năng này. Phương thức SayHello phải được ghi đè với các thuộc tính sau: - Nó phải là phương thức override (ghi đè) để đảm bảo rằng nó được gọi khi có yêu cầu RPC. - Nó phải có kiểu trả về là Task<HelloReply> để đảm bảo rằng phương thức này trả về một kết quả. - Nó phải có tham số đầu vào là HelloRequest request để nhận yêu cầu từ client. - Nó phải có tham số thứ hai là ServerCallContext context để có thể truy cập vào thông tin về cuộc gọi RPC. Vì vậy, phương thức SayHello phải được ghi đè như sau:

Lời giải
public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context)
Mở trang câu hỏi này →
103What does gRPC stand for?4 lựa chọn
AGoogle RESTful Procedure Calls
BgRPC Remote Procedure Calls (a recursive acronym)
CGeneral Routing and Procedure-Calling
DGraph-based Procedure Calls
Lời giải
gRPC là một framework được sử dụng để xây dựng các ứng dụng phân tán. Nó cho phép các ứng dụng giao tiếp với nhau qua các cuộc gọi thủ tục. gRPC Remote Procedure Calls (RPC) là một trong những tính năng chính của gRPC. Nó cho phép các ứng dụng gọi các thủ tục trên các máy chủ khác nhau và nhận lại kết quả. gRPC sử dụng giao thức HTTP/2 để truyền tải dữ liệu và cho phép các ứng dụng giao tiếp với nhau một cách hiệu quả. gRPC Remote Procedure Calls (a recursive acronym) là tên chính thức của gRPC, nó được thiết kế để cho phép các ứng dụng giao tiếp với nhau một cách hiệu quả và linh hoạt.
Mở trang câu hỏi này →
104What is "Server Push" in HTTP/2?4 lựa chọn
AThe ability for the client to push data to the server's cache.
BA security feature that pushes updates to the client.
CThe ability for the server to send resources to the client that it anticipates the client will need, without the client explicitly requesting them.
DA mechanism for streaming video content.
Lời giải
Trong HTTP/2, 'Server Push' là tính năng cho phép máy chủ gửi tài nguyên đến khách hàng mà không cần khách hàng yêu cầu rõ ràng. Điều này cho phép máy chủ dự đoán những tài nguyên mà khách hàng sẽ cần trong tương lai và gửi chúng trước khi khách hàng yêu cầu. Tính năng này giúp cải thiện hiệu suất và giảm thời gian tải trang. Ví dụ, nếu khách hàng đang xem trang web có nhiều hình ảnh, máy chủ có thể gửi hình ảnh đó đến khách hàng trước khi khách hàng yêu cầu, giúp trang web tải nhanh hơn. Tính năng Server Push là một trong những tính năng quan trọng của HTTP/2 và giúp cải thiện hiệu suất của giao tiếp giữa máy chủ và khách hàng.
Mở trang câu hỏi này →