Tôi nghĩ rằng những gì bạn đang cố gắng để hoàn thành được thực hiện tốt nhất bằng cách thêm một mới channel initializer cho người nghe dịch vụ (s) sau khi được tạo ra.
Về cơ bản, bạn tạo một lớp thực hiện giao diện đó, sau đó bạn thêm nó vào máy chủ dịch vụ. Nếu bạn đang tự lưu trữ điều này khá đơn giản:
public class MyHook : IChannelInitializer
{
public void Initialize(IClientChannel channel)
{
// Do whatever.
}
}
var host = new ServiceHost(typeof(MyService), MYBASEADDRESS);
host.AddServiceEndpoint(typeof(IMyService), new WSHttpBinding(), MYSERVICEADDRESS);
host.Open();
// There will be one per endpoint; you can enumerate them if needed etc.
var dispatcher = host.ChannelDispatchers[0] as ChannelDispatcher;
dispatcher.ChannelInitializers.Add(new MyHook());
Vì bạn đang sử dụng chế độ dụ phiên, bạn sẽ tạo kênh mới cho mỗi phiên mới, lần đầu tiên khách hàng kết nối. Điều phối kênh là đối tượng chịu trách nhiệm lấy kênh mới được tạo và liên kết nó với một cá thể đối tượng dịch vụ cụ thể (không khớp địa chỉ, v.v.). Nó sẽ chạy từng bộ khởi tạo tùy chỉnh trên kênh mới trước khi dịch vụ của bạn được kết nối với nó.
Nguồn
2012-03-14 14:50:46
Cảm ơn! Điều đó trả lời chính xác câu hỏi của tôi – galets
Để biết thêm thông tin, hãy xem: http://blogs.msdn.com/b/carlosfigueira/archive/2012/02/14/wcf-extensibility-initializers-instance-context-channel-call-context. aspx Đặc biệt đối với WCF 4.0, cách đề xuất sẽ không hoạt động vì ngoại lệ được ném sau khi Máy chủ được chuyển sang trạng thái mở –