2009-03-26 26 views
6

Tôi hiện đang đùa giỡn với WebServices, sử dụng khung công tác .NET (tệp .asmx, không phải WCF). Tôi tự hỏi thực tiễn tốt nhất để nói với người dùng rằng một số loại lỗi kinh doanh đã xảy ra trong cuộc gọi phương thức.Các phương pháp hay nhất để xử lý lỗi trong dịch vụ web

Trường hợp thử nghiệm nhỏ của tôi:

Tôi có các đầu dò đo cần đăng ký với máy chủ trung tâm. Mỗi đầu dò phải có một địa chỉ vật lý khác nhau. Để đăng ký, họ nên gọi (thông qua dịch vụ web):

[WebMethod] 
public void RegisterReadingStation(out Guid sessionId, Int64 physicalAddress) 

Bây giờ, chữ ký không được đặt trên đá - thực sự, đó là những gì tôi đang cố gắng tìm ra. :) Tôi cần phải bằng cách nào đó cảnh báo thăm dò nếu nó đang cố gắng đăng ký chính nó bằng cách sử dụng một địa chỉ vật lý đã được thực hiện.

Con đường tôi nhìn thấy nó, tôi có một vài khả năng:

  • Ném một SoapException chứa thông tin. Tuy nhiên, một chuỗi :: tin nhắn không thực sự dễ dàng để thực hiện kiểm tra có lập trình trên.
  • Sử dụng một số loại giá trị như một tham số trả về (hoặc thậm chí đơn giản hơn, một enum). Nếu tôi làm điều này, tôi đoán tôi đã phải tự serialize/deserialize lớp trên máy chủ/khách hàng?

Mọi suy nghĩ về điều này?

Trả lời

1

Tôi nghĩ rằng sự đồng thuận chung sẽ sử dụng mã trả về tùy chỉnh (số nguyên). Miễn là dịch vụ ghi lại các mã trả lại có thể là gì, điều này sẽ khả thi.

+0

Eek, quay lại C-days. Vấn đề với cách tiếp cận này là nó không phải là rất linh hoạt. Bạn không thể thêm các thông báo lỗi tùy chỉnh như một stacktrace hoặc một tin nhắn hoặc .. Tôi có thể thấy điều này sẽ là cách dễ dàng và đa tương thích ra mặc dù. – cwap

+0

Tôi có một sự đánh giá cao về các dịch vụ web sai lệch về tính đơn giản. –

+0

Mặc dù đây không phải là câu trả lời bình chọn cao nhất tôi sẽ chấp nhận nó. Tôi thích "Webservices nên đơn giản để sử dụng" khía cạnh của nó, vì vậy đây là những gì Ill dính vào bây giờ :) – cwap

5

Tôi trả về một lớp nhỏ gọi là ResultSet từ mỗi WebMethod, chứa một mã lỗi int và một chuỗi lỗi.

Điều này giúp bạn dễ dàng kiểm tra lỗi/thành công và một số chi tiết nếu mọi thứ xảy ra sự cố.

Nếu WebMethod cần trả về dữ liệu, tôi sẽ kế thừa từ ResultSet để cung cấp cho một ResultSet cụ thể để bao gồm dữ liệu.

+0

Vâng, đó là tôi cũng đang hướng tới :) – cwap

+0

Nhưng phải làm gì khi chức năng dịch vụ web có nghĩa vụ trả về một đối tượng như employeeData khi mọi thứ suôn sẻ và sẽ trả về một thông báo lỗi khi có lỗi. các đối tượng khác nhau từ cùng một chức năng trong kịch bản khác nhau? –

+0

Những gì tôi đã làm là tạo ra một lớp mới được gọi là EmployeeDataResultSet, kế thừa từ ResultSet. Sau đó, tôi đã thêm một Property vào EmployeeDataResultSet, đó là lớp EmployeeData. Về cơ bản, bạn đóng gói dữ liệu nhân viên của bạn trong ResultSet của bạn. – Moose

Các vấn đề liên quan