2010-02-12 11 views
10

Tôi đang xây dựng một DLL, hãy gọi nó là mydll.dll và đôi khi tôi cần gọi các phương thức từ webservice, myservice. mydll.dll được tạo bằng C# và .NET 3.5.Tiêu thụ webservice từ một tệp DLL .NET - app.config

Để tiêu thụ MyService từ mydll tôi đã thêm một dịch vụ trong Visual Studio 2008, mà là nhiều hơn hoặc ít hơn như nhau như sử dụng svcutil.exe. Làm như vậy tạo một lớp tôi có thể tạo và thêm cấu hình điểm cuối và liên kết vào mydll app.config.

Vấn đề ở đây là mydll app.config không bao giờ được tải. Thay vào đó, những gì đang nạp là app.config hoặc web.config của chương trình tôi sử dụng mydll trong.

Tôi hy vọng mydll phát triển, đó là lý do tôi đã tách riêng nó funcionality từ phần còn lại của hệ thống của tôi để bắt đầu với. Trong quá trình tiến hóa đó, nó có khả năng sẽ thêm nhiều dịch vụ web mà nó sẽ gọi, quyết định các cách sao chép-dán thủ công để khắc phục vấn đề này.

Tôi đã xem xét một số phương pháp có thể để tấn công vấn đề này:

  1. thủ sao chép các điểm cuối và các ràng buộc từ mydell app.config để nhắm mục tiêu EXE hoặc web tập tin .config.
    cặp vợ chồng các mô-đun, không linh hoạt
  2. Bao gồm thiết bị đầu cuối và các ràng buộc từ mydll app.config trong mục tiêu .config, sử dụng configSource (xem here). Ngoài ra thêm khớp nối giữa các module
  3. Lập trình tải mydll app.config, đọc các điểm cuối và các ràng buộc, và nhanh chóng Binding và EndpointAddress.
  4. Sử dụng một công cụ khác nhau để tạo ra lối vào địa phương cho MyService

Tôi không chắc chắn mà con đường để đi. Tùy chọn 3 có vẻ hứa hẹn, nhưng khi nó chỉ ra nó là rất nhiều của công việc và có lẽ sẽ giới thiệu một số lỗi, do đó, nó nghi ngờ trả hết. Tôi cũng không quen thuộc với bất kỳ công cụ nào khác với svcutil.exe kinh điển.

Vui lòng cung cấp các ưu và khuyết điểm cho giải pháp thay thế ở trên, cung cấp các mẹo để triển khai bất kỳ giải pháp nào hoặc đề xuất các phương pháp tiếp cận khác.

Cảm ơn,
Asaf

Trả lời

4

Tôi thích tùy chọn 5 - "Trong cấu hình mã", có có, bạn mất quyền lợi thay đổi mà không cần biên dịch lại, nhưng tùy thuộc vào những gì bạn cần. Nếu bạn biết rằng bạn sẽ không bao giờ thay đổi thiết bị đầu cuối của bạn hoặc sẽ hiếm khi thay đổi - chỉ cần cấu hình mã, bạn sẽ nhận được kiểm tra thời gian biên dịch dưới dạng tiền thưởng =) Thisthis có thể trợ giúp.

Và btw, cấu hình trong configs khách hàng là một trường hợp phổ biến, nếu bạn có rất nhiều khách hàng này đây có thể là đau đớn và bạn nên suy nghĩ về 3 hoặc 5 =)

+0

Tôi sẽ thực hiện sao chép cấu hình theo cách thủ công và thêm những gì bạn đã đề xuất sau này. Cảm ơn! –

+0

Bạn được chào đón =) – Restuta

0

tôi nên đi từ tùy chọn 1 hoặc 2 (đối với tôi đây là một trong tốt hơn). Các mô-đun được kết hợp trong dll, vì vậy chúng đã được ghép đôi. Việc thay đổi cấu hình là không đáng kể, nhưng việc tạo cơ sở hạ tầng để đọc sẽ giúp bạn nhiều hơn.

Tùy chọn 3 và 4 có nhiều công việc hơn.

0

tôi đã biên soạn của tôi open source web services framework xuống một dll duy nhất là tốt. Mặc dù đã thực hiện một cách tiếp cận hoàn toàn khác, tôi đã tạo ra IHttpHandler chung cho các điểm cuối JSON và XML (và cấu hình WCF chung cho các điểm cuối SOAP) có thể xử lý mọi yêu cầu. Vì vậy, cấu hình của tôi là một lớp đơn giản cho tất cả dịch vụ web của tôi ánh xạ điểm cuối cho trình xử lý của tôi, nó nằm trong tệp .config của máy chủ ứng dụng (ví dụ: ASP.NET Web.config hoặc Console App.config). được.

2

Bạn có thể sử dụng svcutil như một sự kiện hậu xây dựng trong ứng dụng đang sử dụng DLL. Như thế này:

svcutil.exe <service_address> /config:$(TargetPath).config /mergeConfig 

Điều này sẽ hợp nhất cấu hình cần thiết vào yourapp.exe.config. Nếu bạn thêm một tài liệu tham khảo dịch vụ mới trong DLL bạn sẽ phải thêm một dòng khác ở đây, vì vậy nó không hoàn toàn tự động, nhưng vẫn còn một chút đơn giản hơn bằng tay sao chép cấu hình.