2008-09-29 8 views
6

Tôi đang sử dụng .NET WebService của bên thứ ba trong ứng dụng khách của tôi. Đối với mục đích gỡ lỗi, tôi muốn nắm bắt các yêu cầu SOAP đang được gửi từ máy chủ của tôi. Tôi sẽ đi đâu để tới đó? Điều này đang được thực hiện trên .NET 2.0 mà không cần sử dụng WCF hoặc WSE.Yêu cầu Xà phòng Đăng nhập .NET trên Máy khách

Trả lời

5

Nếu đó là mục đích gỡ lỗi, tôi chỉ cần cấu hình yêu cầu web để sử dụng proxy và gửi toàn bộ yêu cầu mặc dù fiddler (http://www.fiddlertool.com) thì bạn có thể thấy chính xác nội dung được truyền qua dây.

+0

Tôi đã thử khoảng 6 cách khác nhau để thực hiện điều này trong mã trước khi từ bỏ và thử thách thức. Tôi đã đọc về nó và thấy rằng nó hỗ trợ lưu lượng được mã hóa, tôi đã bắt đầu với nó trước. – carson

1

Có nhiều tùy chọn bạn có thể sử dụng. Chắc chắn có một số công cụ thương mại cho điều này (như SOAPScope), nhưng nếu bạn chỉ muốn nắm bắt các nội dung thô của các yêu cầu/phản hồi thì có một số công cụ ngoài Fiddler (mà Walden đã đề cập).

Cá nhân tôi đã là người dùng lâu năm của Simon Fell's TcpTraceYATT.

Nếu bạn quan tâm đến việc thực sự thiết lập mã để có thể tự làm nó (nói, bằng cách ghi lại mọi thứ vào một tệp hoặc gì đó), thì bạn có thể muốn xem xét triển khai SoapExtension trên máy chủ của mình.

11

Tôi đã viết một bài đăng về điều này trước đây có tiêu đề "Logging SOAP Messages in .NET".

Cách dễ nhất là sử dụng các công cụ đã được cung cấp với .NET.

1. Kéo dài lớp SoapExtension.

2. override phương pháp ProcessMessage để có được một kết quả đầy đủ các yêu cầu Xà phòng của bạn, sau đó đầu ra thông tin này vào một tập tin văn bản hoặc ghi sự kiện.

public class SoapMessageLogger : SoapExtension 
{ 
    //… 
    public override void ProcessMessage(SoapMessage message) 
    { 
    switch(message.Stage) 
    { 
     case SoapMessageStage.BeforeDeserialize: 
     LogResponse(message); break; 
     case SoapMessageStage.AfterSerialize: 
     LogResponse(message); break; 
     // Do nothing on other states 
     case SoapMessageStage.AfterDeserialize; 
     case SoapMessageStage.BeforeSerialize; 
     default: break; 
    } 
    } 
    //… 
} 
0

Có thể wireshark? Tôi luôn sử dụng nó để ghi lại lưu lượng truy cập của các ứng dụng của mình.