Không thể tìm thấy phần tử điểm cuối mặc định


369

Tôi đã thêm proxy vào dịch vụ web vào giải pháp VS2008 / .NET 3.5. Khi xây dựng máy khách .NET sẽ xuất hiện lỗi này:

Không thể tìm thấy phần tử điểm cuối mặc định tham chiếu hợp đồng 'IMySOAPWebService' trong phần cấu hình máy khách ServiceModel. Điều này có thể là 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 tìm thấy phần tử điểm cuối phù hợp với hợp đồng này trong phần tử máy khách.

Tìm kiếm lỗi này cho tôi biết sử dụng không gian tên đầy đủ trong hợp đồng. Đây là app.config của tôi với không gian tên đầy đủ:

<client>
  <endpoint address="http://192.168.100.87:7001/soap/IMySOAPWebService"
            binding="basicHttpBinding" bindingConfiguration="IMySOAPWebServicebinding"
            contract="Fusion.DataExchange.Workflows.IMySOAPWebService" name="IMySOAPWebServicePort" />
</client>

Tôi đang chạy XP cục bộ (Tôi đề cập đến vấn đề này vì một số lần truy cập Google đề cập đến win2k3) Ứng dụng này được sao chép vào app.exe.config, vì vậy đó cũng không phải là vấn đề.

Bất kì manh mối nào?


Nếu điều này đang chạy trên một máy chủ web thì bạn cần thêm .svc. Ví dụ: " 192.168.100.87:7001/soap/IMySOAPWebService.svc
Darren C

Dịch vụ này không phải là dịch vụ .NET, nó không chạy trên máy chủ web.
edosoft

Tôi đã giải quyết vấn đề này trong các dự án được phát triển bằng .NET, nhưng tôi có một số dự án trong VB6 và tôi có cùng một vấn đề. Bất kỳ ý tưởng?
Gabriel Intriago

Câu trả lời:


588

"Lỗi này có thể phát sinh nếu bạn gọi dịch vụ trong thư viện lớp và gọi thư viện lớp từ dự án khác."

Trong trường hợp này, bạn sẽ cần bao gồm các cài đặt cấu hình WS vào các dự án chính app.config nếu đó là winapp hoặc web.config nếu là ứng dụng web. Đây là cách để đi ngay cả với PRISM và WPF / Silverlight.


1
Đây không phải là nguyên nhân cho vấn đề cụ thể của tôi, nhưng tôi chắc chắn rằng điều này sẽ giúp những người khác. Cảm ơn
edosoft

9
Có cách nào để tự động hợp nhất hai? Điều gì nếu thư viện lớp cập nhật cấu hình của nó? Bạn chỉ bị kẹt khi nhớ cập nhật thông tin cấu hình được sao chép trong tất cả các dự án đang tham chiếu nó? Khắc phục sự cố này dường như phụ thuộc quá nhiều vào sự cảnh giác của nhà phát triển ...
Sean Hanley

1
Tôi đang gặp lỗi tương tự cho một ứng dụng WP7 (Silverlight tôi tin) và tôi đã mất quá nhiều thời gian để nhận thấy rằng nó ServiceReferences.ClientConfigđược tạo trong thư mục dự án. Sao chép <bindings><client>các phần tử từ tệp trong thư viện của tôi vào ứng dụng chính của tôi (trước đây trống) đã khiến mọi thứ hoạt động.
David Mason

4
Lý do điều này xảy ra (theo tôi hiểu) là các giá trị cấu hình được đọc từ dự án chính trong một giải pháp, đó là web, winforms, wpf, v.v. Giả sử bạn có một dự án thư viện lớp để truy cập cơ sở dữ liệu, mục kết nối sẽ cần phải có trong cấu hình dự án chính thay vì cấu hình thư viện lớp.
Ciaran Bruen

6
Vì vậy, chúng tôi có thể kết luận rằng, nếu chúng tôi sử dụng WCF trong thư viện, sẽ tốt hơn nếu cài đặt mã trực tiếp như liên kết stackoverflow.com/questions/7688798/ .
Youngjae

90

Tôi đã giải quyết điều này (tôi nghĩ như những người khác có thể đã đề xuất) bằng cách tự tạo các trường hợp địa chỉ liên kết và điểm cuối - bởi vì tôi không muốn thêm cài đặt mới vào các tệp cấu hình (đây là một thay thế cho một số mã thư viện hiện có được sử dụng rộng rãi, và trước đây đã sử dụng Tài liệu tham khảo dịch vụ web cũ hơn, v.v.) và vì vậy tôi muốn có thể bỏ phần này vào mà không cần thêm cài đặt cấu hình mới ở mọi nơi.

var remoteAddress = new System.ServiceModel.EndpointAddress(_webServiceUrl);

using (var productService = new ProductClient(new System.ServiceModel.BasicHttpBinding(), remoteAddress))
{
    //set timeout
    productService.Endpoint.Binding.SendTimeout = new TimeSpan(0,0,0,_webServiceTimeout);

    //call web service method
    productResponse = productService.GetProducts();
} 

Biên tập

Nếu bạn đang sử dụng https thì bạn cần sử dụng BasicHttpsBindingchứ không phải BasicHttpBinding.


1
Đây là một câu trả lời hữu ích. Trên một dịch vụ web tôi đang sử dụng, điểm cuối tùy chỉnh phải được ràng buộc trong khai báo ban đầu của đối tượng. Nó sẽ không hoạt động nếu tôi cố gắng làm điều đó sau.
Paul Morel

2
Nhiều như tôi nghi ngờ rằng câu trả lời hàng đầu cũng có thể đã thực hiện thủ thuật này, giải pháp của bạn đã hoạt động và có vẻ như tôi thích hack các tệp cấu hình của riêng mình.
Sam tôi đang nói phục hồi Monica

Hoạt động một sự quyến rũ! Tôi rất thích có thể đặt Điểm cuối trong mã hơn là phân phối tệp "app.config" với ứng dụng của mình.
Daniel Gee

1
Nếu đó là dịch vụ web Https, hãy nhớ thay đổi BasicHttpBinding () thành BasicHttpsBinding ()
Anthony

Giải pháp này là tốt nhất cho các ứng dụng như EXCEL-DNA không có app.config hoặc web.config.
user781700

75

Đã thử nghiệm một số tùy chọn, cuối cùng tôi đã giải quyết điều này bằng cách sử dụng

hợp đồng = "IMySOAPWebService"

tức là không có không gian tên đầy đủ trong cấu hình. Vì một số lý do, tên đầy đủ không được giải quyết đúng cách


3
Có vẻ như, tên hợp đồng đó phải được viết chính xác giống như khách hàng. Trong trường hợp của tôi, tôi đã var proxy = new ExternalServices.ServiceClient("MyServiceEndpoint");làm việc khi tôi thêm không gian tên vào hợp đồng:contract="ExternalServices.IMyService"
Anatoly Mironov

Điều này đã không làm việc cho tôi. Vấn đề của tôi có thể là một chút khác nhau. Tôi nhận được lỗi này thời gian không phải lúc nào. Điều gì có thể là vấn đề. Có thể lỗi mighht ở phía dịch vụ không? _Cảm ơn
albatross

57

Tôi đã có vấn đề tương tự. Hóa ra đối với một TÀI LIỆU THAM KHẢO trên web, bạn phải cung cấp URL làm tham số đầu tiên cho nhà xây dựng:

new WebService.WebServiceSoapClient("http://myservice.com/moo.aspx");

Đối với web kiểu mới TÀI LIỆU THAM KHẢO, bạn phải cung cấp một tên liên quan đến mục nhập điểm cuối trong cấu hình:

new WebService.WebServiceSoapClient("WebServiceEndpoint");

Với một mục tương ứng trong Web.confighoặc App.config:

<client>
      <endpoint address="http://myservice.com/moo.aspx"
        binding="basicHttpBinding" 
        bindingConfiguration="WebService"
        contract="WebService.WebServiceSoap"
        name="WebServiceEndpoint" />
    </client>
  </system.serviceModel>

Khá khó để loại bỏ tầm nhìn đường hầm về "nó hoạt động trong một chương trình cũ hơn" ...


3
À ha! Điều này đã sửa nó cho tôi, tôi chỉ sử dụng một hàm tạo trống trước đó, nó vẫn không thành công: WebService.WebServiceSoapClient (); // fail
travis 7/12/2016

Solutin này đã làm việc !!! nhưng, tôi thực sự tò mò về lý do tại sao điểm cuối mặc định không được tải? bất kỳ ý tưởng cho những gì có thể là lý do?
Dipti Mehta

@Andomar xin lỗi để đưa ra một chủ đề cũ. Có ai có lợi thế hơn người khác - WebReference và ServiceReference không? Tôi nghĩ rằng trước đây sẽ thuận tiện hơn cho tôi nhưng ServiceReference là điều mới mẻ thú vị mà tôi đoán ...
Kev

17

Tôi đã có một tình huống như thế này, nơi tôi đã có

  • Dịch vụ WCF được lưu trữ ở đâu đó
  • Dự án chính
  • Dự án tiêu dùng thuộc loại 'Thư viện lớp' có tham chiếu Dịch vụ đến Dịch vụ WCF
  • Dự án chính gọi phương thức từ dự án tiêu dùng

Bây giờ, dự án Người tiêu dùng đã có tất cả các cài đặt cấu hình có liên quan trong <system.serviceModel>Thẻ của ứng dụng của tôi, nó vẫn bị lỗi tương tự như trên.

Tất cả những gì tôi đã làm được thêm cùng một thẻ <system.serviceModel>vào tệp app.config của dự án chính của tôi và cuối cùng chúng tôi đã rất tốt để đi.

Vấn đề thực sự, theo như trong trường hợp của tôi, đó là đọc tập tin cấu hình sai. Thay vì app.config của người tiêu dùng, nó đã đề cập đến cấu hình chính của proj. tôi phải mất hai giờ để tìm ra điều đó.


1
Tương tự. Tìm kiếm <system.serviceModel>trong thư viện của bạn, sau đó sao chép nó vào app.config của ứng dụng chính của bạn. Chỉ là một triệu chứng khác của thư viện lớp app.configs không được đọc vào thời gian chạy. Tôi dành rất nhiều thời gian để bù đắp cho sự giám sát này (imo). Nếu tôi muốn thư viện đọc cấu hình của nó từ app.config, hãy để nó. Nếu không, tại sao có app.config cho các thư viện lớp ở vị trí đầu tiên ??
SteveCinq

15

"Lỗi này có thể phát sinh nếu bạn gọi dịch vụ trong thư viện lớp và gọi thư viện lớp từ dự án khác."

"Trong trường hợp này, bạn sẽ cần bao gồm các cài đặt cấu hình WS vào app.config dự án chính nếu đó là winapp hoặc web.config nếu là ứng dụng web. Đây là cách để đi ngay cả với PRISM và WPF / Silverlight."

Có, nhưng nếu bạn không thể thay đổi dự án chính (ví dụ như Orchard CMS), bạn có thể giữ cấu hình dịch vụ WCF trong dự án của mình.

Bạn cần tạo một trình trợ giúp dịch vụ với phương thức tạo máy khách:

public static class ServiceClientHelper
{
    public static T GetClient<T>(string moduleName) where T : IClientChannel
    {
        var channelType = typeof(T);
        var contractType = channelType.GetInterfaces().First(i => i.Namespace == channelType.Namespace);
        var contractAttribute = contractType.GetCustomAttributes(typeof(ServiceContractAttribute), false).First() as ServiceContractAttribute;

        if (contractAttribute == null)
            throw new Exception("contractAttribute not configured");

        //path to your lib app.config (mark as "Copy Always" in properties)
        var configPath = HostingEnvironment.MapPath(String.Format("~/Modules/{0}/bin/{0}.dll.config", moduleName)); 

        var configuration = ConfigurationManager.OpenMappedExeConfiguration(new ExeConfigurationFileMap { ExeConfigFilename = configPath }, ConfigurationUserLevel.None);
        var serviceModelSectionGroup = ServiceModelSectionGroup.GetSectionGroup(configuration);

        if (serviceModelSectionGroup == null)
            throw new Exception("serviceModelSectionGroup not configured");

        var endpoint = serviceModelSectionGroup.Client.Endpoints.OfType<ChannelEndpointElement>().First(e => e.Contract == contractAttribute.ConfigurationName);
        var channelFactory = new ConfigurationChannelFactory<T>(endpoint.Name, configuration, null);
        var client = channelFactory.CreateChannel();
        return client;
    }
}

và sử dụng nó:

using (var client = ServiceClientHelper.GetClient<IDefaultNameServiceChannel>(yourLibName)) {
                ... get data from service ...
            }

Xem chi tiết trong bài viết này .


15

Một số câu trả lời ở đây đạt được giải pháp chính xác khi bạn gặp phải lỗi khó hiểu khi tham chiếu dịch vụ từ tệp lớp: sao chép thông tin cấu hình dịch vụ vào app.config web.config của ứng dụng bảng điều khiển hoặc cửa sổ của bạn. Không ai trong số những câu trả lời dường như chỉ cho bạn những gì cần sao chép. Hãy thử và sửa nó.

Đây là những gì tôi đã sao chép từ tệp cấu hình của thư viện lớp, vào tệp cấu hình của ứng dụng bảng điều khiển của tôi, để khắc phục lỗi điên rồ này cho một dịch vụ mà tôi viết có tên là "TranslatorServiceOutbound".

Về cơ bản, bạn muốn mọi thứ bên trong phần system.serviceModel :

  <system.serviceModel>
<bindings>
  <basicHttpBinding>
    <binding name="BasicHttpBinding_ITranslationServiceOutbound" />
  </basicHttpBinding>
</bindings>
<client>
  <endpoint address="http://MyHostName/TranslationServiceOutbound/TranslationServiceOutbound.svc"
    binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ITranslationServiceOutbound"
    contract="TranslationService.ITranslationServiceOutbound" name="BasicHttpBinding_ITranslationServiceOutbound" />
</client>


14

Điều này làm tôi phát điên.

Tôi đang sử dụng Silverlight 3 Prism (CAB) với WCF

Khi tôi gọi dịch vụ WCF trong mô-đun Prism, tôi gặp lỗi tương tự:

Không thể tìm thấy phần tử điểm cuối mặc định tham chiếu hợp đồng 'IMyService' trong phần cấu hình máy khách mô hình dịch vụ. Điều này có thể là 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 tìm thấy phần tử điểm cuối nào phù hợp với hợp đồng này trong phần tử máy khách

Nó chỉ ra rằng nó đang tìm kiếm trong tệp .xap của Shell cho tệp ServiceReferences.ClientConfig, chứ không phải trong tệp ServiceReferences.ClientConfig của mô-đun. Tôi đã thêm điểm cuối và ràng buộc vào tệp ServiceReferences.ClientConfig hiện có trong ứng dụng Silverlight Shell của mình (nó gọi đó là dịch vụ WCF của riêng nó).

Sau đó, tôi phải xây dựng lại ứng dụng Shell để tạo tệp .xap mới cho thư mục ClientBin của dự án Web của tôi.

Bây giờ dòng mã này cuối cùng đã hoạt động:

MyServiceClient myService = new MyServiceClient();

11

Tôi đã gặp lỗi này trong một ứng dụng ASP.NET trong đó dịch vụ WCF đã được thêm vào thư viện lớp đang được thêm vào ứng dụng ASP.NET dưới dạng tệp được tham chiếu trong thư mục bin. Để khắc phục lỗi, cài đặt cấu hình trong tệp app.config trong thư viện lớp tham chiếu dịch vụ WCF cần được sao chép vào cài đặt web.config cho trang web / ứng dụng ASP.NET.


Trong khi các câu trả lời khác có thể đã mô tả cùng một vấn đề. Câu trả lời này mô tả chính xác tình huống của tôi và cuối cùng tôi đã hiểu vấn đề. Cảm ơn bạn đã cứu ngày của tôi
Wouter Vanherck

10

Tôi đã tìm thấy (cũng như sao chép vào App.config của UI khách hàng khi tôi đang sử dụng giao diện Thư viện lớp) Tôi phải đặt tiền tố tên của ràng buộc với tên của Tham chiếu dịch vụ (của tôi ServiceReferenceở bên dưới).

ví dụ:

<endpoint address="http://localhost:4000/ServiceName" binding="basicHttpBinding"
      bindingConfiguration="BasicHttpBinding_ISchedulerService"
      contract="ServiceReference.ISchedulerService" 
      name="BasicHttpBinding_ISchedulerService" />

thay vì mặc định được tạo:

<endpoint address="http://localhost:4000/ServiceName" binding="basicHttpBinding"
      bindingConfiguration="BasicHttpBinding_ISchedulerService"
      contract="ISchedulerService" 
      name="BasicHttpBinding_ISchedulerService" />

1
Tôi đã phải làm điều tương tự. Tôi thực sự không hiểu tại sao.
Brig

8

Tôi có cùng một vấn đề, nhưng thay đổi không gian tên hợp đồng không làm việc cho tôi. Vì vậy, tôi đã thử tham chiếu web kiểu .Net 2 thay vì tham chiếu dịch vụ .Net 3.5. Điều đó đã làm việc.

Để sử dụng tham chiếu Web trong Visual Studio 2008, nhấp vào 'Thêm tham chiếu dịch vụ', sau đó nhấp vào 'Nâng cao' khi hộp thoại xuất hiện. Trong đó bạn sẽ tìm thấy một tùy chọn cho phép bạn sử dụng tham chiếu Web thay vì tham chiếu Dịch vụ.


2
Đây là những gì tôi đã làm là tốt. Tôi muốn vấn đề có ý nghĩa với tôi.
Jarrett Widman

Điều này cũng làm việc cho tôi. Bây giờ tôi có tất cả rác bổ sung này trong giải pháp của mình (Cài đặt. Cài đặt, thư mục Tham khảo Web mới) không có lý do chính đáng. Sẽ phải quay lại và ghé thăm lại khi tôi có nhiều thời gian hơn.
Mike K

Đã đồng ý. Tôi đã có cùng một vấn đề và đã khắc phục nó bằng cách thay đổi nó thành một tham chiếu web.
Stephen Hosking

7

Đơn vị kiểm tra một ứng dụng không phải thư viện tiêu thụ một dịch vụ có thể gây ra vấn đề này.

Thông tin mà những người khác đã nhập địa chỉ nguyên nhân gốc rễ của việc này. Nếu bạn đang cố gắng viết các trường hợp thử nghiệm tự động và đơn vị bạn đang thử nghiệm sẽ thực sự gọi giao diện dịch vụ, bạn cần thêm tham chiếu dịch vụ vào dự án thử nghiệm. Đây là một hương vị của ứng dụng sử dụng loại thư viện lỗi. Tôi đã không ngay lập tức nhận ra điều này bởi vì mã của tôi sử dụng giao diện không có trong thư viện . Tuy nhiên, khi thử nghiệm thực sự chạy nó sẽ chạy từ lắp ráp thử nghiệm, không phải lắp ráp thử nghiệm.

Thêm một tham chiếu dịch vụ cho dự án thử nghiệm đơn vị đã giải quyết vấn đề của tôi.


7

Tôi có một tình huống trong bài kiểm tra Đơn vị. Tôi đã sao chép tệp app.config vào dự án thử nghiệm đơn vị. Vì vậy, dự án thử nghiệm đơn vị cũng chứa thông tin điểm cuối.


2
Tôi đã không sao chép app.config hoàn chỉnh, nhưng system.serviceModelphần này. Đó là tất cả!
kwrl

Tương tự, ngoại trừ tôi đã sao chép system.serviceModelvào app.config của ứng dụng bảng điều khiển
AlbatrossCafe

5

Tôi đã đối mặt với vấn đề này một lần. Đó là bởi vì tôi vẫn đang phát triển giao diện sử dụng dịch vụ WCF. Tôi cấu hình ứng dụng thử nghiệm và tiếp tục phát triển. Sau đó, trong quá trình phát triển, tôi đã thay đổi một số không gian tên của dịch vụ. Vì vậy, tôi đã kiểm tra lại "system.serviceModel -> client -> endpoint -> hợp đồng" trong web.config để khớp với lớp WCF. Sau đó, vấn đề được giải quyết.


4

Không gian tên trong cấu hình của bạn sẽ phản ánh phần còn lại của đường dẫn không gian tên sau không gian tên mặc định của máy khách (như được định cấu hình trong thuộc tính dự án). Dựa trên câu trả lời được đăng của bạn, tôi đoán rằng máy khách của bạn được định cấu hình trong không gian tên "Fusion.DataExchange.Workflows". Nếu bạn di chuyển mã máy khách sang không gian tên khác, bạn sẽ cần cập nhật cấu hình để khớp với đường dẫn không gian tên còn lại.


3

Tôi có một vấn đề tương tự. Tôi đã sử dụng Dịch vụ WCF trong thư viện lớp và gọi thư viện lớp từ windows Ứng dụng dự án. Nhưng tôi quên thay đổi <system.serviceModel>tệp cấu hình của ứng dụng windows Dự án giống như <system.serviceModel>tệp app.Config của Thư viện lớp.
Giải pháp: thay đổi Cấu hình của dự án bên ngoài giống với cấu hình wcf của thư viện lớp.


3

Xin chào, tôi đã gặp phải vấn đề tương tự nhưng giải pháp tốt nhất là để .NET định cấu hình cấu hình phía máy khách của bạn. Những gì tôi khám phá là khi tôi thêm một tham chiếu dịch vụ với chuỗi truy vấn http: /namespace/service.svc? Wsdl = wsdl0, nó KHÔNG tạo điểm cuối cấu hình ở phía máy khách. Nhưng khi tôi xóa? Wsdl-wsdl0 và chỉ sử dụng url http: /namespace/service.svc, nó sẽ tạo cấu hình điểm cuối tại tệp cấu hình máy khách. đối với viết lại ngắn gọn "? WSDL = WSDL0".


3

Không đặt dòng khai báo của máy khách làm trường lớp, thay vào đó, tạo cá thể tại mỗi phương thức được sử dụng. Vì vậy, vấn đề sẽ được khắc phục. Nếu bạn tạo cá thể dịch vụ khách như trường lớp, thì lỗi thời gian thiết kế xảy ra!


3

Trong trường hợp nếu bạn đang sử dụng ứng dụng WPF bằng khung PRISM thì cấu hình sẽ tồn tại trong dự án khởi động của bạn (tức là trong dự án nơi bootstrapper của bạn cư trú.)


2

Lỗi này có thể phát sinh nếu bạn đang gọi dịch vụ trong thư viện lớp và gọi thư viện lớp từ dự án khác.


2

Dường như có một số cách để tạo / khắc phục vấn đề này. Đối với tôi, sản phẩm CRM tôi đang sử dụng được viết bằng mã gốc và có thể gọi .NET dll của tôi, nhưng tôi chạy vào thông tin cấu hình cần phải ở / trên ứng dụng chính. Đối với tôi, ứng dụng CRM không phải là .NET, vì vậy cuối cùng tôi đã phải đặt nó vào tệp machine.config (không phải nơi tôi muốn). Ngoài ra, do công ty của tôi sử dụng Websense, tôi đã gặp khó khăn ngay cả khi thêm Tham chiếu dịch vụ do vấn đề Yêu cầu xác thực proxy 407, để yêu cầu sửa đổi cho machine.cong.

Giải pháp proxy:

Để làm cho Tham chiếu dịch vụ WCF hoạt động, tôi phải sao chép thông tin từ app.config của DLL của tôi vào cấu hình ứng dụng chính (nhưng đối với tôi đó là machine.config). Và tôi cũng phải sao chép thông tin điểm cuối vào cùng một tệp. Khi tôi đã làm điều đó nó bắt đầu làm việc cho tôi.


2

Đồng ý. Trường hợp của tôi hơi khác một chút nhưng cuối cùng tôi đã tìm ra cách khắc phục: Tôi có Console.EXE -> DLL -> Gọi WS1 -> DLL -> Gọi WS2

Tôi đã có cả các cấu hình của mô hình dịch vụ của WS1 và WS2 trong Console.EXE.config như được đề xuất. - không giải quyết được vấn đề.

Nhưng nó vẫn không hoạt động, cho đến khi tôi đã thêm WebReference của WS2 vào WS1 và không chỉ cho DLL thực sự tạo và gọi proxy của WS2.


2

Nếu bạn tham chiếu dịch vụ web trong thư viện lớp thì bạn phải sao chép app.config sang ứng dụng windows hoặc ứng dụng bảng điều khiển

Giải pháp: thay đổi Cấu hình của dự án bên ngoài giống với cấu hình wcf của thư viện lớp.

Đã làm cho tôi


2

Tôi gặp vấn đề tương tự
Tôi đang sử dụng ứng dụng máy tính để bàn và sử dụng dịch vụ Global Weather Web

Tôi đã xóa tham chiếu dịch vụ và thêm tham chiếu web và giải quyết vấn đề Cảm ơn


2

Giải pháp cho tôi là xóa tên điểm cuối khỏi thuộc tính Tên điểm cuối trong máy khách web.config điều này cho phép proxy sử dụng

ChannelFactory<TService> _channelFactory = new ChannelFactory<TService>("");

chỉ mất cả ngày để làm việc. Ngoài ra tên hợp đồng đã sai khi sửa lỗi này được thực hiện mặc dù nó đã bị sai khi lỗi ban đầu xuất hiện. Nhân đôi kiểm tra ba lần cho chuỗi tên người hợp đồng !! chú ý: Ian


2

Cho phép tôi thêm một điều nữa để tìm kiếm. ( Câu trả lời của Tom Haigh đã ám chỉ nó, nhưng tôi muốn nói rõ)

web.configTập tin của tôi có định nghĩa như sau:

<protocolMapping>
    <add binding="basicHttpsBinding" scheme="https" />
</protocolMapping>

Tôi đã sử dụng basicHttpsBinding cho một tham chiếu, nhưng sau đó tôi đã thêm một tham chiếu mới yêu cầu basicHttpBinding (no s). Tất cả những gì tôi phải làm là thêm nó vào protocolMappingnhư sau:

<protocolMapping>
    <add binding="basicHttpBinding" scheme="http" />
    <add binding="basicHttpsBinding" scheme="https" />
</protocolMapping>

Như LR chỉ ra chính xác, điều này cần được xác định ở đúng nơi. Đối với tôi, điều đó có nghĩa là một trong app.config của dự án Thử nghiệm đơn vị của tôi cũng như một trong web.config của dự án dịch vụ chính.


2

Tôi đã gặp lỗi này khi tham chiếu Hợp đồng trong thành phần tệp cấu hình mà không có toán tử phạm vi toàn cầu.

I E

<endpoint contract="global::MyNamepsace.IMyContract" .../>

hoạt động, nhưng

<endpoint contract="MyNamepsace.IMyContract" .../>

đưa ra lỗi "Không thể tìm thấy phần tử điểm cuối mặc định tham chiếu hợp đồng".

Tập hợp có chứa MyNamepsace.IMyContract nằm trong một tập hợp khác với ứng dụng chính, vì vậy điều này có thể giải thích sự cần thiết phải sử dụng độ phân giải phạm vi toàn cầu.


2

Khi bạn thêm một tham chiếu dịch vụ

nhập mô tả hình ảnh ở đây

hãy cẩn thận với không gian tên bạn đang gõ:

nhập mô tả hình ảnh ở đây

Bạn nên thêm nó vào tên của giao diện của bạn:

<client>
  <endpoint address="http://192.168.100.87:7001/soap/IMySOAPWebService"
            binding="basicHttpBinding" 
            contract="MyNamespace.IMySOAPWebService" />
</client>

2

Tôi đã gặp lỗi tương tự và tôi đã thử nhiều thứ nhưng không hiệu quả, tôi nhận thấy rằng "hợp đồng" của tôi không giống nhau ở tất cả các dự án, tôi đã thay đổi hợp đồng giống như tất cả các dự án bên trong giải pháp và hơn là nó hoạt động. Đây là dự án A

<client>
    <endpoint address="https://xxxxxxxx" binding="basicHttpBinding" bindingConfiguration="basic" contract="ServiceReference.IIntegrationService" name="basic" />
</client>

Dự án B:

<client>
    <endpoint address="xxxxxxxxxxxxx" binding="basicHttpBinding" bindingConfiguration="basic" contract="ServiceReference1.IIntegrationService" name="basic" />
</client>

Cuối cùng tôi đã thay đổi cho cả hai như:

<client>
    <endpoint address="https://xxxxxxxxxxx" binding="basicHttpBinding" bindingConfiguration="basic" contract="MyServiceReferrence.IIntegrationService" name="basic" />
</client>

1

Tôi có cùng một vấn đề và nó chỉ được giải quyết khi ứng dụng máy chủ và dll sử dụng điểm cuối đó có cùng tên tham chiếu dịch vụ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.