2009-10-08 29 views
5

tôi đang gặp phải sự cố ở đây. Tôi đang làm một dự án khách hàng/máy chủ, đó là dịch vụ web WCF gọi để nhận dữ liệu. Do dữ liệu khổng lồ của việc chuyển, tôi phải thay đổi ràng buộc của mình thành ràng buộc tùy chỉnh theo chương trình (không phải theo tệp cấu hình.)Làm thế nào để xây dựng một ràng buộc tùy chỉnh bằng cách bảo mật WSHttpBinding và nén GZip?

Tôi tạo liên kết ràng buộc tùy chỉnh mới do người dùng định nghĩa. dụ của lớp là:

public class MyCustomBinding : CustomBinding  

và ghi đè lên một hàm BindingElementCollection:

public override BindingElementCollection CreateBindingElements() 
{ 
    WSHttpBinding wSHttpBinding = new WSHttpBinding("RMSKeberosBinding"); //this is to load the configuration from app.config. because i want to copy the setting of wsHttpConfig to my custom binding. 

    BindingElementCollection wSHttpBindingElementCollection = wSHttpBinding.CreateBindingElements(); 

    TransactionFlowBindingElement transactionFlowBindingElement = wSHttpBindingElementCollection.Remove<TransactionFlowBindingElement>(); 
    SymmetricSecurityBindingElement securityElement = wSHttpBindingElementCollection.Remove<SymmetricSecurityBindingElement>(); 
    MessageEncodingBindingElement textElement = wSHttpBindingElementCollection.Remove<MessageEncodingBindingElement>(); 
    HttpTransportBindingElement transportElement = wSHttpBindingElementCollection.Remove<HttpTransportBindingElement>(); 

    GZipMessageEncodingBindingElement gzipElement = new GZipMessageEncodingBindingElement(); // this is from microsoft sample. i want to add gzip as a compress to my message. 

    BindingElementCollection newCol = new BindingElementCollection(); 
    newCol.Add(transactionFlowBindingElement); 
    newCol.Add(securityElement); 
    newCol.Add(gzipElement); 
    newCo .Add(transElement); 
    return newCol; 
} 

những gì tôi đang cố gắng làm là sao chép tất cả các thiết lập từ wsHttpBinding, và thêm vào gzip như bộ mã hóa thông điệp. Nén dữ liệu được mã hóa sẽ dẫn đến kích thước dữ liệu gốc lớn hơn. điều này là do SymmetricSecurityBindingElement từ WSHttpBinding đã thực hiện mã hóa. Làm cách nào để thực hiện điều này theo cách chính xác? tôi muốn cài đặt bảo mật từ wshttpbinding và cả gzip để hoạt động.

Trả lời

0

Bạn sẽ có thể chỉ cần sử dụng một hành vi áp dụng nén cho phù hợp:

http://weblogs.asp.net/cibrax/archive/2006/03/29/441398.aspx

EDIT: Tôi có lẽ cũng nên bao gồm các liên kết đến các nén dựa Hành vi:

http://weblogs.shockbyte.com.ar/rodolfof/archive/2006/04/06/5632.aspx

+0

Hi, cảm ơn bạn đã trả lời. Tôi đã xem liên kết bạn đã cung cấp cho tôi trước đây. Xin lỗi, nhưng tôi không thể nhìn thấy nơi được sử dụng cùng một hành vi bảo mật của WSHttpBinding? Liên kết mà bạn cung cấp có bao gồm mã hóa không? –

+0

Từ kinh nghiệm của tôi bằng cách sử dụng mã mà tôi liên kết đến, mặc dù toàn bộ thông điệp được mã hóa được nén, nó không dẫn đến kích thước thư lớn hơn mà thay vào đó giảm kích thước thư. Thông điệp ở cốt lõi của nó chỉ là SOAP (tức là văn bản tiết), do đó bằng cách sử dụng nén, bạn sẽ thấy lợi ích. Tôi có hiểu lầm bạn muốn làm gì không? – Kwal

+0

Xin chào MattK, cảm ơn bạn đã trả lời. Đối với kinh nghiệm của tôi trong đó, bất cứ khi nào tôi thêm SymmetricSecurityBindingElement và GZipMessageEncodingBindingElement vào bộ sưu tập phần tử ràng buộc (vui lòng tham khảo mã ở trên), thông báo luôn được mã hóa lúc đầu, sau đó chỉ tiến hành nén. Tôi đã sử dụng Fiddler để kiểm tra việc sử dụng băng thông. Nó rất lớn sau khi nén tin nhắn được mã hóa. Tôi không biết cách giải quyết chuyện này. Nhân tiện, liên kết bạn đã gửi cho tôi, bạn có thể cho tôi biết phần mã hóa tin nhắn ở đâu không? tôi không thể quản lý để tìm mã để mã hóa. Cảm ơn MattK. –

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