Bối cảnhLàm cách nào để tăng kích thước POST cho một dịch vụ web ASMX?
Tôi đang phát triển một điều khiển phía máy chủ ASP.Net cần nói chuyện với dịch vụ web ASMX. Điều khiển phía máy chủ sử dụng đối tượng WebClient
để nói chuyện với dịch vụ web, vì nó cần được sử dụng lại thường xuyên trong các ứng dụng khác nhau và để làm cho các nhà phát triển dễ dàng hơn, họ không bắt buộc phải tạo tham chiếu dịch vụ cho dịch vụ web.
Thực hiện
Trong việc sử dụng sự kiểm soát, người ta đòi hỏi việc gửi một đối tượng serialized với dịch vụ web. Đối tượng được tuần tự hóa bằng cách sử dụng XmlSerializer
và chuỗi XML kết quả sau đó được nén bằng cách sử dụng thư viện nén chilkat. Cuộc gọi dịch vụ web cho việc kiểm soát trông như sau:
webClient.UploadStringAsync(new Uri(serviceHost + serviceMethod), "POST", sendData)
Nội dung của sendData (string
) là compressedResponse={CompressedData}
.
Dịch vụ web có phương thức được xác định như sau để nhận dữ liệu và sau đó giải nén giá trị chuỗi bằng cách sử dụng thư viện chilkat trước khi hủy nối tiếp đối tượng bằng cách sử dụng XmlSerializer
.
public void SaveResponse(string compressedResponse)
Các thông tin liên lạc giữa kiểm soát và các dịch vụ đang làm việc. Ban đầu không có cài đặt hoặc ràng buộc nào được xác định trong web.config
cho bất kỳ điều nào ở trên. Sau khi tìm kiếm ban đầu tôi đã thêm
<httpRuntime maxRequestLength="20480"/>
cho cả client và server web.config
tập tin. Điều này đã không có sự khác biệt.
Vấn đề
nén hay giải nén các dữ liệu được gửi đến dịch vụ web trong biến sendData
là lớn đối với một yêu cầu POST bình thường, và là hỏng. Điều này được xác nhận khi kiểm tra vài ký tự cuối cùng của chuỗi trước và sau khi nó được đăng lên máy chủ ở định dạng nén và không nén, tài liệu Xml thiếu thẻ gốc cuối cùng khi kiểm tra trong trình gỡ lỗi. Không thể giải nén string
và do đó cuộc gọi dịch vụ không thành công mỗi lần.
Làm cách nào để tăng kích thước POST cho yêu cầu WebClient
để đảm bảo rằng máy chủ nhận được chuỗi đầy đủ?
Tôi đã xem xét các tùy chọn khác nhau trên Google, nhưng không có gì cho tôi mẫu đủ tốt về nơi thực hiện thay đổi hoặc mẫu của những thay đổi cần phải trông như thế nào. Tôi hoàn toàn bị mất về việc liệu thay đổi có cần phải được thực hiện trên máy chủ hoặc trang web tiêu thụ hay không và vì không có ràng buộc nào được xác định cho điều này, cách tạo liên kết trong web.config
cho cuộc gọi dịch vụ ASMX HTTP.
điều gì khiến bạn tin rằng chuỗi quá dài? Chỉ thực tế là nó không thể được giải nén? Nó trông như thế nào ở Fiddler? –
@ John tôi đã cập nhật câu hỏi với thông tin. Thực hiện kiểm tra cơ bản trên chuỗi đã nén bằng cách sao chép vài ký tự cuối cùng trước bài đăng và xác thực nó trước chuỗi đã đăng. Ngoài ra việc gửi tài liệu Xml chưa nén cho thấy rằng thẻ gốc cuối cùng bị thiếu, và nó bị cắt giữa chừng khi kiểm tra trong trình gỡ lỗi. – BinaryMisfit