2011-09-29 51 views
10

Có cách nào để tạo một cá thể của một máy khách dịch vụ WCF trong C# với một địa chỉ điểm cuối đã chỉ định mà không chỉ định tên cấu hình không?Tạo máy khách dịch vụ WCF với địa chỉ được chỉ định mà không chỉ định tên cấu hình

Theo mặc định, khách hàng có những cấu trúc:

public ServiceClient() 
    public ServiceClient(string endpointConfigurationName) 
    public ServiceClient(string endpointConfigurationName, string remoteAddress) 

Rõ ràng, có một cấu hình mặc định, vì các nhà xây dựng đầu tiên. Những gì tôi muốn là chỉ xác định tham số thứ 2 của hàm tạo cuối cùng. Ngay bây giờ, tôi đang đấu tranh thông qua việc đọc các yếu tố cấu hình của việc sử dụng ConfigurationManager để tìm ra nó, nhưng nó có vẻ khủng khiếp rườm rà. Có cách nào sạch hơn không?

Trả lời

1

Vâng, bạn có thể sử dụng hàm tạo mặc định, nhưng sau đó bạn phải tự lập trình trong tất cả các cài đặt cấu hình. Bằng cách chỉ định tên cấu hình, máy khách dịch vụ sẽ tự động tải cấu hình từ tệp .config, tất cả những gì bạn cần biết là cấu hình nào sẽ sử dụng (bạn có thể có nhiều cấu hình, ví dụ: HTTP và Net.Tcp). RemoteAddress, tất nhiên, chỉ cần nói với WCF nơi để thực hiện kết nối.

Nếu bạn gặp sự cố khi định cấu hình cài đặt ứng dụng khách, hãy đảm bảo bạn đang sử dụng công cụ Cấu hình dịch vụ WCF. Nó hoạt động cho cả cấu hình dịch vụ cũng như cấu hình máy khách.

6

client tạo của bạn cũng nên có một constructor trông như thế này:

public ServiceClient(
    System.ServiceModel.Channels.Binding binding, 
    System.ServiceModel.EndpointAddress remoteAddress) 
     : base(binding, remoteAddress) { 
    } 

Bạn có thể gọi một này mà không cần một cấu hình thiết bị đầu cuối.

8

Tôi không muốn sử dụng cấu hình điểm cuối trong tệp .config. Tôi thường làm điều gì đó như thế này:

 BasicHttpBinding basicbinding = new BasicHttpBinding(); 
     basicbinding.SendTimeout = TIMEOUT; 
     basicbinding.OpenTimeout = TIMEOUT; 
     ServiceClient client = new ServiceClient(basicbinding, new EndpointAddress(new Uri("http://xxxxx"))); 
+2

Lớp EndPointAddress có một hàm tạo phải lấy một chuỗi uri ngay lập tức. Không cần phải thêm "Uri mới" vào đó. – Nyerguds

3

Nếu bạn muốn thực sự chỉ muốn gọi một dịch vụ mà không cần phải biết tất cả mọi thứ có biết về các dịch vụ WCF và xử lý cấu hình, trong C# bạn chỉ có thể làm ..

 String url = "http:\\somehost:someport\\pathToSomeService"; 

     EndpointAddress address = new EndpointAddress(url); 
     Binding binding = new BasicHttpBinding(); 

     YourClient client = new YourClient(binding, address); 

     // Call your client methods 
     client.SomeMethod(parm1, parm2); 

Ở trên giả sử bạn đã tạo tham chiếu dịch vụ và không yêu cầu thông tin cấu hình tồn tại ở bất kỳ đâu, không phải trong tham chiếu dịch vụ được tạo ra, không phải trong tệp DLL và không thực thi được. Không có cấu hình. Không ai.

Tôi sử dụng ở trên trong dll proxy dịch vụ độc lập thực sự. Nó là độc lập trong ý nghĩa xác thực nhất của từ như nó là hoàn toàn cấu hình mà không phụ thuộc vào thực thi cuộc gọi để cung cấp bất cứ điều gì.

+0

Điều này giả định http ràng buộc cơ bản, mà tôi không thể giả định. Tôi đã đọc phần dịch vụ khách hàng từ tệp cấu hình theo cách thủ công và lập trình xây dựng ràng buộc. – recursive

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