2012-01-06 46 views
12

Mã của tôi sử dụng nhiều cuộc gọi WCF và khi tôi cố gắng gỡ lỗi nó, nó không đi đến chính mã dịch vụ. Có cách nào để gỡ lỗi mã WCF bằng cách nào đó?Làm thế nào để gỡ lỗi các chương trình WCF

+0

Bạn đang chạy dịch vụ WCF như thế nào? Bên trong IIS hoặc là một ứng dụng độc lập? –

Trả lời

13

Bạn cần phải đính kèm các trình gỡ lỗi để quá trình mà dịch vụ WCF bạn đang chạy trong.

Nếu trong IIS bạn cần phải gắn với quá trình w3p.exe tương ứng.

Nếu trong một ứng dụng độc lập hoặc dịch vụ cửa sổ, hãy đính kèm với tên của exe của bạn.

Trong Visual Studio, trên trình đơn trình gỡ lỗi, có "đính kèm vào quy trình". Mở mã có liên quan, đặt điểm ngắt và gọi dịch vụ làm cho đường dẫn mã đó thực thi.

Bên ngoài gỡ lỗi, sử dụng. Truy tìm bằng các mức có thể chuyển đổi là một cách hay để hiểu rõ những gì đang diễn ra. Tôi thường thiết lập sys internals debugview để đánh dấu các lỗi màu sắc và cảnh báo và liên tục có nó chạy trong khi chạy mã hoặc kiểm tra. Đường màu ra khỏi tầm nhìn ngoại vi của tôi trong khi làm việc tìm thấy vấn đề.

2

Tự đính kèm bản thân dịch vụ chứ không phải mã đang gọi.

3

Để gỡ lỗi dịch vụ WCF trong studio trực quan 2010, hãy chuyển đến Gỡ lỗi -> Đính kèm vào quy trình. Chọn "Hiển thị quy trình từ tất cả người dùng" và chọn w3p.exe nếu bạn đang sử dụng IIS hoặc tên của ứng dụng nếu không. Đặt trong một breakpoint, thực hiện cuộc gọi, và sau đó bạn có thể bắt đầu gỡ lỗi.

Nếu đó là ứng dụng web (tôi khuyên bạn nên làm điều này), bạn có thể nhấp chuột phải vào dự án, chuyển đến tab Web và trong Bắt đầu tác vụ chọn "Không mở trang, đợi yêu cầu từ bên ngoài ứng dụng". Lưu và đóng cài đặt này, sau đó chỉ cần nhấn F5 để bắt đầu gỡ lỗi.

+0

Gỡ lỗi ứng dụng web đã tiết kiệm cho tôi rất nhiều thời gian! –

11

Nếu bạn đang tìm kiếm để theo dõi các hoạt động WCF để xem lưu lượng được tạo ra theo đúng thứ tự, sau đó tôi muốn giới thiệu một trong những phương pháp sau đây:

1) Sử dụng fiddler để xem giao thông WCF.

2) Sử dụng trình theo dõi WCF để giám sát các cuộc gọi WCF thực tế. Điều này cực kỳ hữu ích khi cố gắng xác định nguyên nhân thất bại serialization. Bạn có thể bật này bằng cách thêm khối sau vào khối cấu hình web.config của bạn:

<system.diagnostics> 
    <sources> 
     <source name="System.ServiceModel" 
       switchValue="Information, ActivityTracing" 
       propagateActivity="true"> 
     <listeners> 
      <add name="traceListener" 
       type="System.Diagnostics.XmlWriterTraceListener" 
       initializeData="c:\log\WebTrace.svclog" /> 
     </listeners> 
     </source> 
    </sources> 
    </system.diagnostics> 

Kích đúp chuột vào tập tin được tạo ra sẽ mở ra cho người xem log dịch vụ WCF, mà sẽ phân tích các tập tin cho bạn và cho phép bạn để đi sâu vào các cuộc gọi cụ thể và xem các ngoại lệ thực tế xảy ra.

+1

Điều này đã được ** vô cùng ** hữu ích trong trường hợp của tôi. Cảm ơn rất nhiều! – LoBo

1

Khi chạy một ứng dụng truy cập WCF dịch vụ thường có hai quá trình liên quan đến

  • Quá trình khách hàng được tiếp cận các dịch vụ WCF
  • Quá trình máy chủ được lưu trữ các dịch vụ WCF

Có vẻ như bạn đang gỡ lỗi quy trình khách hàng. Để bước qua mã dịch vụ WCF thực tế, bạn cần đính kèm Trình gỡ lỗi Visual Studio vào quá trình đang lưu trữ dịch vụ và thiết lập một điểm ngắt trong mã.

Lưu ý: Visual Studio có thể đính kèm vào nhiều quy trình cùng một lúc để bạn có thể gỡ lỗi cả mã máy khách và máy chủ trong cùng một phiên. Sử dụng

  • Tools -> Đính kèm để trình
12

Có một cách dễ dàng hơn nhiều. Chỉ cần bắt đầu nhiều quy trình trong Visual Studio. Nhấp chuột phải vào Solution. Nhấp vào Thuộc tính. Chọn Dự án khởi động. Nhấp vào Nhiều dự án khởi động. Đặt WCF và các dự án Client thành Action = Start. Bây giờ bạn sẽ bước qua WCF cũng như khách hàng.

+0

điều này có lẽ nên được chọn làm câu trả lời đúng – Sergei

0

Trong trường hợp của tôi, tôi đặt trang WCF như StartUp Project trong Visual Studio và trực tiếp điều hành WCF trong chế độ Debug,

mục WCF trong Visual Studio Solution Explorer cũng giống như:

enter image description here

sau WCF bắt đầu, sẽ có một chương trình trang web mới trong trình duyệt, và url của nó sẽ thích http://xxxx:xxport/Service.svc, sao chép uri này và sử dụng nó trong chương trình khác, những người gọi WCF này,

sau đó đặt điểm ngắt tại phương thức mà cuộc gọi chương trình, điểm ngắt sẽ được nhập thành công khi chương trình thực thi.

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