2009-10-21 36 views
5

Tôi đang làm việc trên một hệ thống lớn, mà tôi phải sử dụng WCF để truy cập một dịch vụ web. Mã thử nghiệm của tôi hoạt động tốt, bây giờ tôi cần phải tích hợp mã khách hàng WCF của tôi vào hệ thống lớn hơn. Tôi không thể thêm vào tệp 'app.config' hiện có và muốn chỉ định tệp .config riêng biệt để sử dụng bởi mã khách hàng của tôi.Làm cách nào để chỉ định tệp cấu hình thay thế cho ứng dụng khách WCF?

Làm cách nào tốt nhất tôi có thể thực hiện việc này?

Cảm ơn!

Trả lời

8

Có 2 tùy chọn.

Tùy chọn 1. Làm việc với các kênh.

Nếu bạn đang làm việc với các kênh trực tiếp, .NET 4.0 và .NET 4.5 có ConfigurationChannelFactory. Ví dụ trên MSDN trông như thế này:

ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap(); 
fileMap.ExeConfigFilename = "Test.config"; 
Configuration newConfiguration = ConfigurationManager.OpenMappedExeConfiguration(
    fileMap, 
    ConfigurationUserLevel.None); 

ConfigurationChannelFactory<ICalculatorChannel> factory1 = 
    new ConfigurationChannelFactory<ICalculatorChannel>(
     "endpoint1", 
     newConfiguration, 
     new EndpointAddress("http://localhost:8000/servicemodelsamples/service")); 
ICalculatorChannel client1 = factory1.CreateChannel(); 

Như đã chỉ ra bởi Langdon, bạn có thể sử dụng địa chỉ endpoint từ tập tin cấu hình bằng cách đơn giản đi qua trong null, như thế này:

var factory1 = new ConfigurationChannelFactory<ICalculatorChannel>(
     "endpoint1", 
     newConfiguration, 
     null); 
ICalculatorChannel client1 = factory1.CreateChannel(); 

này được thảo luận trong MSDN documentation.

Tùy chọn 2. Làm việc với proxy.

Nếu bạn đang làm việc với các proxy được tạo mã, bạn có thể đọc tệp cấu hình và tải ServiceModelSectionGroup. Có nhiều hơn một chút công việc liên quan hơn chỉ đơn giản bằng cách sử dụng ConfigurationChannelFactory nhưng ít nhất bạn có thể tiếp tục sử dụng proxy được tạo ra (mà dưới mui xe sử dụng một ChannelFactory và quản lý IChannelFactory cho bạn.

Pablo Cibraro cho thấy một ví dụ tốt đẹp của này đây : Getting WCF Bindings and Behaviors from any config source

+0

Philippe - Tôi đã tìm thấy Option 1 khá dễ sử dụng, nhưng bạn có thể tư vấn thêm về Option2 hay không. Tất cả những gì tôi tìm thấy là số lượng không hỗ trợ ed @ generator @ đang sử dụng Reflection và không bao gồm 100% tùy chọn cấu hình có thể có. –

+0

@GeorgySmirnov, bạn có thấy liên kết tới http://weblogs.asp.net/cibrax/archive/2010/05/11/getting-wcf-bindings-and-behaviors-from-any-config-source.aspx trong Lựa chọn 2? Nó cho thấy một ví dụ rất tốt. – Philippe

1

Không có hỗ trợ tích hợp cho điều này trong WCF. Bạn phải tự tạo lớp con ChannelFactory của riêng mình và tự tải/phân tích các tệp cấu hình. Hãy xem this post tại đây trên diễn đàn MSDN để biết thêm chi tiết triển khai. (Mã bao gồm làm việc) và thực hiện một tập tin tùy chỉnh cấu hình như trong bài viết này, trong đó sử dụng một DataSet/mô hình DataTable để lưu trữ/lấy cấu hình của bạn -

4

bạn không thể làm điều này theo ý muốn - bạn có thể đến gần, nhưng không thể làm điều đó hoàn toàn.

gì bạn có thể làm là thêm phần này để tập tin cấu hình ứng dụng chính của:

<system.serviceModel> 
    <bindings configSource="bindings.config" /> 
    <behaviors configSource="behaviors.config" /> 
    <client configSource="client.config" /> 
    <services configSource="services.config" /> 
    ..... 
</system.serviceModel> 

Vì vậy, cho từng bộ phận bên trong <system.serviceModel>, bạn có thể chỉ định một tập tin cấu hình bên ngoài bằng cách sử dụng thuộc tính configSource= (và không để cho các đường màu đỏ của Visual Studio nhầm lẫn nó - có, nó DOES hoạt động!).

Bạn có thể làm điều này cho bất kỳ cấu hình phần - nhưng không may, không có cách nào để làm điều này cho cả phần nhóm (<system.serviceModel>).

Marc

0

Vì vậy, các tùy chọn được đề cập bởi marc_s DOES làm việc. Bỏ qua Visual Studio cảnh báo rằng nó không nhận ra thuộc tính configSource trên các ràng buộc và tất cả các nơi khác.

+1

Chào mừng bạn đến với Stack Overflow! Cảm ơn bạn đã đăng bài! Vui lòng không sử dụng chữ ký/khẩu hiệu trong bài viết của bạn. Câu hỏi thường gặp về chữ ký/khẩu hiệu] (http://stackoverflow.com/faq#signatures) –

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