2010-02-16 35 views
5

Tôi đang tạo ra một ServiceFactory để giành quyền kiểm soát inicialization các dịch vụ của tôi tiếp xúc thông qua IIS 7.WCF ServiceHost đã có 5 hành vi

Tuy nhiên Tôi đang ngạc nhiên bởi hành vi của ServiceHost. Mặc dù tôi có 0 file cấu hình cho dịch vụ, bất cứ nơi nào tôi khởi một ServiceHost mới, như thế này:

var host = new ServiceHost(typeof(MyService), baseAddresses); 

Tiếp theo, tôi muốn thêm một số hành vi chỉ khi xây dựng đang ở chế độ gỡ lỗi:

#if DEBUG 
host.Description.Behaviors.Add(new ServiceDebugBehavior()); 
#endif 

Tuy nhiên mã này không thành công do ServiceDebugBehavior đã được áp dụng! Mặc dù tôi không có tệp cấu hình và không có thuộc tính nào được áp dụng cho lớp dịch vụ, máy chủ đã có hành vi này và 5 ứng dụng khác được áp dụng!

Đây có phải là hành vi mong đợi không? Điều gì sẽ xảy ra nếu tôi muốn tắt ServiceDebugBehavior trên bản phát hành bản phát hành?

Cảm ơn trước,

Trả lời

5

Không dễ dàng - không cài đặt Tôi biết chỉ cần tắt chế độ này. Câu hỏi thực sự là: lợi ích gì bạn nhận được từ đó ??

Từ những gì tôi thấy, hầu hết các hành vi đó là rất cần thiết - thông tin xác thực và dịch vụ và vv. Và nếu chúng ở đó theo mặc định, ngay cả khi không có cấu hình, tôi sẽ tin rằng chúng ở đó vì một lý do. Nhưng nếu bạn thực sự thực sự muốn, bạn luôn có thể tự tạo CustomServiceHost của riêng bạn và làm bất cứ điều gì bạn thích bên trong lớp đó - bao gồm tung ra tất cả các hành vi được xác định trước, nếu bạn muốn.

Nếu bạn muốn, ví dụ: cho phép các IncludeExceptionDetailsInFaults thiết lập trên các dịch vụ debug hành vi của dịch vụ của bạn, hãy thử loại mã:

ServiceDebugBehavior behavior = 
     host.Description.Behaviors.Find<ServiceDebugBehavior>(); 

if(behavior != null) 
{ 
    behavior.IncludeExceptionDetailInFaults = true; 
} 
else 
{ 
    host.Description.Behaviors.Add(
     new ServiceDebugBehavior() { IncludeExceptionDetailInFaults = true }); 
} 

Trong trường hợp này, nếu ServiceDebugBehavior hiện diện đã có, bạn tìm thấy nó và chỉ cần thiết lập thuộc tính cho đúng - nếu không bạn tạo và thêm ServiceDebugBehavior mới. Khá dễ, tôi nghĩ vậy.

+0

Weel Tôi không phàn nàn về hành vi mà bạn nói, như xác thực và thông tin đăng nhập dịch vụ. Tuy nhiên tôi nghĩ là lạ khi đưa DebugBehavior vào trong túi. Tôi không muốn để lộ hành vi này trên các dịch vụ sản xuất của tôi. Ngoài ra không phải là điểm có một DebugBehavior ở tất cả? Nó cho phép bạn cắm nó khi có ý nghĩa. Vậy đây có phải là hành vi được xác định trước của WCF không? –

+0

Có, nhưng cài đặt 'IncludeExceptionDetailsInFaults' trên' ServiceDebugBehavior' bị tắt ** theo mặc định! Về mục đích, quá - đó là một điều tốt! –

0

Bạn không nên tạo hành vi gỡ lỗi dịch vụ trong #if DEBUG, thay vì chỉ đặt giá trị cho thuộc tính bạn muốn thay đổi từ mặc định.

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