2013-01-16 27 views
6

Tôi đã thêm tham chiếu đến dịch vụ WCF có hai điểm kết thúc. Mở thêm các dịch vụ sau đây được thêm vào tập tin cấu hình:Không thể tìm thấy phần tử điểm cuối có tên và hợp đồng

<client> 
    <endpoint name="ABCServiceV1" address="http://staging.ABCwebservices.com/ABC/Service.svc" 
    binding="basicHttpBinding" bindingConfiguration="ABCServiceV1" 
    contract="ABCService.IService" /> 
    <endpoint name="ABCServiceV2" address="http://staging.ABCwebservices.com/ABC/Service.svc/20" 
    binding="basicHttpBinding" bindingConfiguration="ABCServiceV2" 
    contract="ABCService.IService1" /> 
</client> 

Mã để tạo ra các khách hàng là như như sau:

ABCService.ServiceClient ABCClient = new ServiceClient("ABCServiceV2"); 

Tuy nhiên, tôi nhận được một lỗi runtime - "Could not tìm phần tử điểm cuối có tên 'ABCServiceV2' và ký hợp đồng 'ABCService.IService' trong phần cấu hình máy khách ServiceModel. Điều này có thể do không tìm thấy tệp cấu hình cho ứng dụng của bạn hoặc vì không có phần tử điểm cuối nào khớp với tên này trong phần tử máy khách . "

nếu tôi sử dụng ABCService.ServiceClient ABCClient = new ServiceClient("ABCServiceV1"); thì mọi thứ đều hoạt động tốt. Nhưng khi sử dụng ABCServiceV2, nó đang tìm kiếm hợp đồng - ABCService.IService - khi cần tìm kiếm - ABCService.IService1.

Tôi làm cách nào để tìm kiếm hợp đồng chính xác?

+0

Địa chỉ cho ABCServiceV2 có thêm '20' vào cuối ... Tôi không chắc liệu có liên quan gì đến nó hay không. Chỉ là một quan sát. – user959729

+0

Tôi nghĩ rằng sẽ ổn khi '20' là cần thiết để làm cho điểm cuối khác nhau. Cả hai điểm cuối của dịch vụ đều hoạt động tốt trên một công cụ như SoapUI. Vì vậy, vấn đề là một nơi nào đó trong mã khách hàng. – ipoh

Trả lời

3

Nếu bạn thêm tham chiếu thứ hai vào một dịch vụ khác (ABCServiceV2) thì tôi tin rằng điều này sẽ tạo ra một lớp dịch vụ thứ hai cho ABCServiceV2. Hai lớp sẽ thực hiện các hợp đồng riêng biệt (ABCService.IService và ABCService.IService1), do đó bạn sẽ không thể trao đổi các điểm cuối.

Tôi tin rằng bạn sẽ có thể khởi tạo hai điểm cuối dịch vụ của bạn như vậy:

ABCService.ServiceClient ABCClient = new ServiceClient("ABCServiceV1"); 
ABCService.Service1Client ABCClient1 = new Service1Client("ABCServiceV2"); 
+1

Cảm ơn .. vấn đề là tôi đã sử dụng ServiceClient thay vì Service1Client. Mã sau hoạt động mà không có vấn đề: ABCService.Service1Client ABCClient1 = new Service1Client ("ABCServiceV2"); – ipoh

1

Mặc dù bài viết này là cũ và trả lời, câu trả lời không giúp đỡ trong trường hợp của tôi. Vấn đề của tôi là tôi đã tạo ứng dụng khách dịch vụ bằng công cụ svcutil.exe, nhưng không chỉ định bất kỳ không gian tên nào; và do đó tên không gian tên hợp đồng được tạo ra như là không gian tên đích của tài liệu lược đồ theo mặc định, có tổng số lộn xộn.

Mặt khác, tôi đã cố gắng sử dụng tệp cấu hình được tạo khi tham chiếu dịch vụ được thêm vào dự án. Không gian tên hợp đồng trong tệp này là ServiceReference1 (theo mặc định) hoặc bất kỳ tên nào khác mà bạn muốn, bão hoàn hảo! Nhưng tất cả những gì tôi phải làm là xóa phần không gian tên khỏi FQN khỏi thuộc tính hợp đồng của <endpoint> và hợp đồng đã được hiển thị cho CLR.

Hy vọng điều này sẽ giúp người khác

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