2008-08-24 37 views
6

Tôi có một dịch vụ web WCF được tham chiếu từ một thư viện lớp. Sau khi dự án được điều hành, khi tạo đối tượng phục vụ khách hàng từ bên trong một thư viện lớp, tôi nhận được một InvalidOperationException với thông điệp:InvalidOperationException trong khi tạo cá thể dịch vụ web wcf

không thể tìm thấy yếu tố endpoint mặc định tham chiếu hợp đồng 'MyServiceReference.IMyService' trong client ServiceModel phần cấu hình. Điều này có thể do không có tệp cấu hình nào được tìm thấy cho ứng dụng của bạn hoặc vì không có phần tử điểm cuối phù hợp với hợp đồng này có thể được tìm thấy trong phần tử ứng dụng khách.

Mã Tôi đang sử dụng để tạo ra các ví dụ là:

myServiceClient = new MyServiceClient(); 

nơi MyServiceClient thừa hưởng từ

System.ServiceModel.ClientBase

Làm thế nào để giải quyết này?

Lưu ý: Tôi có một ứng dụng giao diện điều khiển riêng biệt mà chỉ cần tạo cùng một đối tượng dịch vụ và thực hiện cuộc gọi đến nó và nó hoạt động mà không có vấn đề gì.

Trả lời

5

Dưới đây là file app.config của tôi về thư viện lớp:

Bạn nên đặt này thiết lập cấu hình để tập tin cấu hình ứng dụng chính. Ứng dụng .NET (đang gọi thư viện lớp của bạn) sử dụng dữ liệu từ tệp cấu hình riêng của nó không phải từ tệp cấu hình thư viện của bạn.

+3

đâu app.config của bạn? – iamserious

0

Có thể sẽ hữu ích nếu bạn đăng tệp app.config của mình, vì loại lỗi này có xu hướng trỏ đến sự cố trong khối <endpoint>. Đảm bảo thuộc tính hợp đồng có vẻ phù hợp với bạn.

Chỉnh sửa: Thử hoàn toàn đủ điều kiện giá trị hợp đồng của bạn; sử dụng không gian tên đầy đủ. Tôi nghĩ điều đó là cần thiết.

1

Tôi đã có một trường hợp tương tự. Tôi đã có một thư viện lớp được gọi là một dịch vụ web, sau đó tôi đã có một .EXE được gọi là class-lib's .DLL. Tôi nghĩ rằng đó là tập tin cấu hình .EXE được sử dụng và không phải của cấu hình .DLL.

Nhưng như Richard đã nói ở trên, tôi phải hoàn toàn đủ điều kiện cho không gian tên. Đó là một chút đau đớn. Dưới đây là chính xác những gì tôi đã thay đổi. Nỗi đau là tôi phải thay đổi nó ở hai nơi, một trong reference.cs được tạo ra khi bạn tạo một tham chiếu dịch vụ và một trong tệp cấu hình. Vì vậy, mỗi khi tôi thay đổi dịch vụ web và thực hiện "Cập nhật Cập nhật", tôi phải thực hiện lại thay đổi đối với mã C#.

1) Bạn thực sự phải thay đổi ConfigurationName trong Reference.cs như sau:

Từ: [System.ServiceModel.ServiceContractAttribute(Namespace = "http://TFBIC.RCT.BizTalk.Orchestrations", ConfigurationName = " RCTWebService.WcfService_TFBIC_RCT_BizTalk_Orchestrations")]

Để: [System.ServiceModel.ServiceContractAttribute(Namespace = "http://TFBIC.RCT.BizTalk.Orchestrations", ConfigurationName = "TFBIC.RCT.HIP.Components.RCTWebService.WcfService_TFBIC_RCT_BizTalk_Orchestrations")]

2) và sau đó cũng thay đổi “hợp đồng” giá trị trong tất cả các app.config liên quan (cho của .dll và.exe) như sau:

Từ:

< endpoint địa chỉ = http://nxwtest08bt1.dev.txfb-ins.com/TFBIC.RCT.BizTalk.Orchestrations/WcfService_TFBIC_RCT_BizTalk_Orchestrations.svc ràng buộc = "wsHttpBinding" bindingConfiguration = "WSHttpBinding_ITwoWayAsync" hợp đồng = "RCTWebService.WcfService_TFBIC_RCT_BizTalk_Orchestrations" name = "WSHttpBinding_ITwoWayAsync" >

Tới:

< địa chỉ điểm cuối = http://nxwtest08bt1.dev.txfb-ins.com/TFBIC.RCT.BizTalk.Orchestrations/WcfService_TFBIC_RCT_BizTalk_Orchestrations.svc ràng buộc = "wsHttpBinding" bindingConfiguration = "WSHttpBinding_ITwoWayAsync" tên hợp đồng = "TFBIC.RCT.HIP.Components.RCTWebService.WcfService_TFBIC_RCT_BizTalk_Orchestrations" = "WSHttpBinding_ITwoWayAsync" >

Chỉ cần được rõ ràng - làm thế nào tôi biết những gì đầy đủ các không gian tên là? Không gian tên của chương trình là TFBIC.RCT.HIP. Bên trong đó, đoạn code C# có thêm một tuyên bố namespace:

namespace RCTHipComponents 
8

Hoặc bạn có thể thiết lập các thiết bị đầu cuối trong mã của bạn:

http://msdn.microsoft.com/en-us/library/ms731862.aspx

BasicHttpBinding binding = new BasicHttpBinding(); 
EndpointAddress address = new EndpointAddress("http://url-to-service/"); 

// Create a client that is configured with this address and binding. 
MyServiceClient client = new MyServiceClient(binding, address); 
Các vấn đề liên quan