Tôi hiện đang di chuyển dịch vụ RESTF WCF của tôi từ .NET 3.5 (Starter Kit) sang .NET 4. Tôi bắt đầu dự án của mình bằng cách sử dụng mẫu dịch vụ WCF Rest from Visual Studio 2010. Tôi phải tìm ra cách giữ lược đồ ủy quyền của tôi (được thực hiện một cách chính xác với RequestInterceptor) bằng ServiceAuthorizationManager. Sau khi một số công việc và nghiên cứu tôi đã hoàn thành nó. Nhưng bây giờ tôi có vấn đề về tài sản thế chấp. Dịch vụ của tôi được sử dụng để phản hồi khách hàng của tôi về bất kỳ lỗi xử lý nào bằng cách sử dụng mã trạng thái HTTP và mô tả ngắn gọn. Tôi đã sử dụng WebOperationContext tại nhiều điểm của phương pháp dịch vụ của tôi để mô tả cho các khách hàng những gì đã xảy ra, như thế này:WCF 4 dịch vụ REST không thể trả về một StatusDescription, chỉ có StatusCode
protected void returnCode(HttpStatusCode code, string description)
{
WebOperationContext ctx = WebOperationContext.Current;
ctx.OutgoingResponse.StatusDescription = description;
ctx.OutgoingResponse.StatusCode = code;
}
Nhưng trong WCF 4, chỉ StatusCode hoạt động - StatusDescription âm thầm thất bại. Tôi không thể hiểu tại sao. Đoán duy nhất của tôi là WebOperationContext không hoạt động trong kịch bản WCF 4 mới này, và tôi nên sử dụng OperationContext thay vào đó, nhưng điều đó cũng không hoạt động. Các phương pháp sau đây được sử dụng trong lớp tùy chỉnh của tôi mở rộng ServiceAuthorizationManager, thông báo cho khách hàng một yêu cầu không thể được truy cập bởi vì auth tiêu hóa đã bị thay đổi:
private void GenerateBadDigestMessage(ref OperationContext operationContext)
{
Message reply = Message.CreateMessage(MessageVersion.None, null, null, new DataContractJsonSerializer(typeof(object)));
HttpResponseMessageProperty hrp = new HttpResponseMessageProperty();
hrp.StatusCode = HttpStatusCode.Forbidden;
hrp.StatusDescription = "bad digest";
reply.Properties[HttpResponseMessageProperty.Name] = hrp;
operationContext.RequestContext.Reply(reply);
operationContext.RequestContext = null;
}
Thậm chí bằng cách sử dụng OperationContext direclty đây (insted của WebOperationContext), StatusDescription không công việc.
Tôi thiếu gì ở đây? Tại sao một điều nhỏ như vậy có thể phá vỡ từ .NET 3.5 đến 4?
Tự lưu trữ hoặc IIS? Phiên bản máy chủ nào? Tôi đã thử nghiệm này trên 4.0 với Server 2008R2 tự lưu trữ, và nó hoạt động tốt (trả về mô tả trạng thái như thiết lập). – nitzmahone
Bạn đã bao giờ tìm được giải pháp chưa? Tôi đang đối mặt với vấn đề tương tự. – Hemant