2010-01-08 49 views
5

Khi sử dụng ASP.Net Ajax để gọi PageMethods, làm cách nào tôi có thể truy cập vào tiêu đề phản hồi Http từ phương thức "thành công"?Truy cập Phản hồi Tiêu đề từ ASP.Net PageMethod Gọi

Ví dụ:

PageMethods.DoSomething(
    function(result){successMethod(result)}, 
    function(error){errorMethod(error)} 
); 

function successMethod(result){ 
    //------how can I access the Http response headers from here? ------ 
} 

Nhờ sự giúp đỡ

Trả lời

2

Trong ví dụ của bạn, PageMethods.DoSomething phải có giá trị trả về bằng WebRequest nếu đó là proxy dịch vụ web asp.net. Điều này được cung cấp để bạn có thể thao tác các yêu cầu sau khi bạn đã bắt đầu nó (tức là hủy bỏ nó vv).

Với lớp này, bạn có phương thức add_completed mà bạn có thể sử dụng để thêm trình xử lý khi yêu cầu web hoàn tất. Chữ ký cho cuộc gọi lại là function OnWebRequestCompleted(executor, eventArgs) và thông số executor cho phép bạn giữ thông tin phản hồi bổ sung. Ví dụ: bạn có thể giữ các tiêu đề phản hồi với executor.getAllResponseHeaders(); đó phải là một bản đồ (bộ sưu tập có tên) của tên và giá trị tiêu đề. Vì vậy, nếu bạn thêm người xử lý vào sự kiện hoàn thành yêu cầu web ngay sau khi thực hiện cuộc gọi phương thức dịch vụ, nó sẽ hoạt động (không có dịch vụ web nào trên thế giới có thể phản hồi nhanh hơn hai dòng mã liên tiếp!).

Liên kết trước đó tới WebRequest chứa một ví dụ đầy đủ về cách dây này lên. Tuy nhiên, lưu ý rằng mã này sử dụng trực tiếp WebRequest.

Lớp proxy proxy dịch vụ Web Ajax Asp.Net sử dụng lớp WebServiceProxy và mỗi phương pháp proxy cuối cùng gọi phương thức invoke của nó, trả về phiên bản WebRequest.

+0

Cảm ơn Chúa Zoltan. Đó là thông tin rất hữu ích! – James

+0

vui mừng được sử dụng;) –

0

Một yêu cầu web có một bộ sưu tập tiêu đề

http://msdn.microsoft.com/en-us/library/bb383774.aspx

Các webrequestmanager là một đối tượng tĩnh mà bạn có thể trích xuất thông tin này từ:

http://msdn.microsoft.com/en-us/library/bb397435.aspx

Hy vọng rằng, giữa hai liên kết, điều đó có ý nghĩa: -;

Tôi không nói rằng recode sử dụng này nhất thiết, nhưng phương pháp trang là một wrapper và như vậy tôi nghĩ rằng nó sẽ truy cập vào thông tin từ một trang web yêu cầu, có thể bị ảnh hưởng từ WebRequestManager ...

+0

Cảm ơn Brian. Vấn đề duy nhất với điều này là tôi không thể được đảm bảo rằng yêu cầu tôi nhận được giống với yêu cầu được kết hợp với phương pháp thành công đó. Nó có rất nhiều yêu cầu asyn xảy ra cùng một lúc, tôi có thể kết thúc với một yêu cầu khác, hoặc bản thân yêu cầu thậm chí có thể đã kết thúc vào thời điểm phương thức thành công được gọi. Tôi thực sự muốn có một cách để truy cập các tiêu đề phản hồi cho cuộc gọi cụ thể đó. Tôi có tùy chọn để làm điều này nếu tôi recode để sử dụng thư viện jQuery để thực hiện cuộc gọi, nhưng tôi thực sự muốn sử dụng thư viện .net cho nhất quán. – James

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