2009-07-28 7 views
13

Tôi có nhu cầu thêm tiện ích mở rộng hành vi tùy chỉnh vào các điểm cuối ứng dụng khách WCF của mình. Tôi đã thử làm điều này thông qua cấu hình, nhưng đã bị cắn bởi lỗi thường được đề cập trong đó cấu hình WFC không thể phân tích cú pháp tên loại chính xác. Vì vậy, tôi có thể làm điều này theo chương trình thay thế?Lập trình và toàn cầu thêm tiện ích mở rộng hành vi điểm cuối của máy khách WCF tùy chỉnh

Tôi không thể sửa đổi các phần cấu hình trong thời gian chạy vì chúng là chỉ đọc. Tôi biết nếu tôi nhận được một bản sao của một trường hợp của một proxy khách hàng (ví dụ: ClientBase), tôi có thể thêm vào Endpoint.Behaviors của nó một thể hiện của hành vi tùy chỉnh của tôi. Tuy nhiên, tôi sẽ phải làm điều này cho mỗi trường hợp.

Tôi có thể truy cập các điểm cuối trên toàn cầu và thêm trước chúng (ví dụ: Global.asax) hoặc các điểm cuối này được khởi tạo và loại bỏ tạm thời không?

+0

Bạn có thể đăng liên kết đến vấn đề không phân tích cú pháp tên loại chính xác không? –

Trả lời

14

Bạn sẽ có thể thêm hành vi cho khách hàng trong mã một cái gì đó như thế này:

IMyEndpointBehavior behavior = client.Endpoint.Behaviors.Find<IMyEndpointBehavior>(); 

if(behavior == null) 
{ 
    client.Endpoint.Behaviors.Add(new MyEndpointBehaviorImplementation()); 
} 

Dòng đầu tiên sẽ kiểm tra nếu hành vi đó đã được áp dụng để tránh việc áp dụng nó hai lần. Nếu nó chưa được áp dụng (số gọi .Find() trả về null), thì bạn có thể thêm hành vi đó vào lớp khách hàng của bạn theo chương trình.

Bạn cần thực hiện tất cả điều này trước khi thực hiện cuộc gọi đầu tiên tới dịch vụ. Một khi bạn đã làm điều đó, bạn không thể thay đổi máy khách nữa.

Marc

+1

Đó là một trong những giải pháp mà chúng tôi hiện đang sử dụng. Phần rắc rối là chúng ta đang lười biếng khởi tạo nó. Tôi muốn có một cách tiếp cận chủ động hơn, có lẽ trong Global.asax. Có vẻ như tôi có thể đặt nó trong cấu hình ứng dụng (vốn dĩ là toàn cầu), hoặc tôi có thể lập trình cấu hình nó khi sử dụng lần đầu tiên, nhưng tôi không thể lập trình * toàn cầu * cấu hình nó. – Trinition