Nie można znaleźć domyślnego elementu końcowego

369

Dodałem serwer proxy do usługi internetowej do rozwiązania VS2008 / .NET 3.5. Podczas konstruowania klienta .NET zgłasza ten błąd:

Nie można znaleźć domyślnego elementu punktu końcowego, który odwołuje się do kontraktu „IMySOAPWebService” w sekcji konfiguracji klienta ServiceModel. Może to być spowodowane tym, że nie znaleziono pliku konfiguracji dla Twojej aplikacji lub dlatego, że element klienta pasujący do tej umowy nie został znaleziony.

Wyszukanie tego błędu każe mi użyć pełnej przestrzeni nazw w umowie. Oto moja app.config z pełną przestrzenią nazw:

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

Korzystam z XP lokalnego (wspominam o tym, ponieważ wiele hitów Google wspomina o win2k3) Plik app.config jest kopiowany do pliku app.exe.config, więc nie stanowi to również problemu.

Jakieś wskazówki?

edosoft
źródło
Jeśli to działa na serwerze WWW, musisz dodać .svc. Przykład: „ 192.168.100.87:7001/soap/IMySOAPWebService.svc
Darren C
Usługa nie jest usługą .NET, nie działa na serwerze WWW.
edosoft,
Rozwiązałem ten problem w projektach opracowanych w .NET, ale mam kilka projektów w VB6 i mam ten sam problem. Jakieś pomysły?
Gabriel Intriago,

Odpowiedzi:

588

„Ten błąd może wystąpić, jeśli wywołujesz usługę w bibliotece klas i wywołujesz bibliotekę klas z innego projektu.”

W takim przypadku musisz włączyć ustawienia konfiguracji WS do głównego projektu app.config, jeśli jest to aplikacja winapp lub web.config, jeśli jest to aplikacja internetowa. W ten sposób można przejść nawet z PRISM i WPF / Silverlight.

LR
źródło
1
To nie był powód mojego konkretnego problemu, ale jestem pewien, że to pomoże innym. Dzięki
edosoft,
9
Czy jest jakiś sposób, aby automatycznie połączyć te dwa elementy? Co się stanie, jeśli biblioteka klas zaktualizuje swoją konfigurację? Czy po prostu utknąłeś w pamięci, aby zaktualizować skopiowane informacje o konfiguracji we wszystkich projektach, do których się ona odnosi? Ta poprawka wydaje się zbytnio polegać na czujności dewelopera ...
Sean Hanley,
1
Otrzymuję ten sam błąd w przypadku aplikacji WP7 (wierzę Silverlight) i zajęło mi zbyt długo zauważenie, że ServiceReferences.ClientConfigjest generowane w katalogu projektu. Kopiowanie elementów <bindings>i <client>z pliku z mojej biblioteki do mojej głównej aplikacji (która wcześniej była pusta) działało.
David Mason,
4
Powodem tego jest (jak rozumiem) to, że wartości konfiguracji są odczytywane z głównego projektu w rozwiązaniu, czy to web, winforms, wpf itp. Powiedzmy na przykład, że masz projekt biblioteki klas, aby uzyskać dostęp do bazy danych, wpis connectionString będzie musiał znajdować się w głównej konfiguracji projektu, a nie w konfiguracji biblioteki klas.
Ciaran Bruen,
6
Możemy zatem stwierdzić, że jeśli używamy WCF w bibliotece, lepiej byłoby kodować ustawienia bezpośrednio, jak pokazano na stronie linkoverflow.com/questions/7688798/ ....
Youngjae
90

Rozwiązałem to (myślę, jak sugerują inni), samodzielnie tworząc instancje powiązania i adresu końcowego - ponieważ nie chciałem dodawać nowych ustawień do plików konfiguracyjnych (jest to zamiennik istniejącego kodu biblioteki, który jest szeroko stosowany, i poprzednio korzystałem ze starszego odwołania do usługi sieci Web itp.), więc chciałem móc to wprowadzić bez konieczności dodawania wszędzie nowych ustawień konfiguracji.

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();
} 

Edytować

Jeśli używasz protokołu https, musisz użyć BasicHttpsBindingzamiast BasicHttpBinding.

Tom Haigh
źródło
1
To jest pomocna odpowiedź. W usłudze sieciowej, której używam, niestandardowy punkt końcowy musiał być związany w początkowej deklaracji obiektu. Nie zadziałałoby, gdybym spróbował to zrobić później.
Paul Morel,
2
O ile podejrzewam, że najlepsza odpowiedź mogła załatwić sprawę, twoje rozwiązanie zadziałało i wydaje mi się, że lepiej jest, gdybym zhakował moje własne pliki konfiguracyjne.
Sam, jestem, mówi Przywróć Monikę
Działa urok! Zdecydowanie wolę ustawić punkt końcowy w kodzie niż rozpowszechniać plik „app.config” w mojej aplikacji.
Daniel Gee
1
Jeśli jest to usługa internetowa Https, pamiętaj o zmianie BasicHttpBinding () na BasicHttpsBinding ()
Anthony
To rozwiązanie jest najlepsze dla aplikacji takich jak EXCEL-DNA, które nie mają app.config lub web.config.
user781700
75

Po przetestowaniu kilku opcji w końcu rozwiązałem to za pomocą

umowa = "IMySOAPWebService"

tzn. bez pełnej przestrzeni nazw w konfiguracji. Z jakiegoś powodu pełna nazwa nie została poprawnie rozwiązana

edosoft
źródło
3
Wygląda na to, że nazwa umowy musi być napisana dokładnie w taki sam sposób jak klient. W moim przypadku var proxy = new ExternalServices.ServiceClient("MyServiceEndpoint");działało, gdy dodałem przestrzeń nazw do kontraktu:contract="ExternalServices.IMyService"
Anatolij Mironow
To nie działało dla mnie. Mój problem może być trochę inny. Ten błąd pojawia się od czasu do czasu nie zawsze. Co może być problemem. Czy błąd może być po stronie serwisu? _Dziękujemy
albatross
57

Miałem ten sam problem. Okazuje się, że dla REFERENCJI internetowej musisz podać konstruktorowi adres URL jako pierwszy parametr:

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

W przypadku nowego stylu ODNIESIENIE SERWISOWE, musisz podać nazwę, która odnosi się do pozycji punktu końcowego w konfiguracji:

new WebService.WebServiceSoapClient("WebServiceEndpoint");

Z odpowiednim wpisem Web.configlub App.config:

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

Cholernie trudno jest usunąć wizję tunelu z „działało w starszym programie” ...

Andomar
źródło
3
Ach ha! To dla mnie naprawiło, po prostu używałem wcześniej pustego konstruktora, który ciągle zawodził: new WebService.WebServiceSoapClient (); // fail
travis,
To solutin zadziałało !!! ale naprawdę jestem ciekawy, dlaczego domyślny punkt końcowy nie został załadowany? jakieś pomysły na jakie mogą być przyczyny?
Dipti Mehta
@ Andomar przepraszam, że przywołałem stary wątek. Czy ktoś ma przewagę nad drugą - WebReference i ServiceReference? Myślę, że ten pierwszy byłby dla mnie wygodniejszy, ale ServiceReference to chyba fajna nowa rzecz ...
Kev
17

Miałem taką sytuację, gdzie miałem

  • Usługa WCF Gdzieś hostowana
  • Główny projekt
  • Projekt konsumencki typu „Biblioteka klas”, który ma odniesienie do usługi do usługi WCF
  • Główny projekt wywołuje metody z projektu konsumenckiego

Teraz projekt Consumer miał wszystkie powiązane ustawienia konfiguracji w <system.serviceModel>tagu mojego app.config, nadal zgłaszał ten sam błąd co powyżej.

Wszystko, co zrobiłem, to dodanie tego samego znacznika <system.serviceModel>do pliku app.config mojego głównego projektu, i wreszcie mogliśmy zacząć.

Prawdziwym problemem, o ile w moim przypadku, był odczyt niewłaściwego pliku konfiguracyjnego. Zamiast app.config konsumenta odnosił się on do konfiguracji głównego proj. Zrozumienie tego zajęło mi dwie godziny.

Brawo
źródło
1
Podobnie. Wyszukaj <system.serviceModel>w swojej bibliotece, a następnie skopiuj ją do app.config głównej aplikacji. Kolejny objaw braku odczytu biblioteki app.config w klasie w czasie wykonywania. Sporo czasu spędzam, kompensując ten niedopatrzenie (imo). Jeśli chcę, aby biblioteka odczytała swoją konfigurację z pliku app.config, pozwól mi. W przeciwnym razie, po co w ogóle app.config dla bibliotek klas?
SteveCinq,
15

„Ten błąd może wystąpić, jeśli wywołujesz usługę w bibliotece klas i wywołujesz bibliotekę klas z innego projektu.”

„W takim przypadku konieczne będzie włączenie ustawień konfiguracji WS do głównego projektu app.config, jeśli jest to aplikacja win. lub web.config, jeśli jest to aplikacja internetowa. To jest sposób, aby przejść nawet z PRISM i WPF / Silverlight.”

Tak, ale jeśli nie możesz zmienić głównego projektu (na przykład Orchard CMS), możesz zachować konfigurację usługi WCF w swoim projekcie.

Musisz utworzyć pomocnika usługi za pomocą metody generowania klienta:

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;
    }
}

i użyj go:

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

Zobacz szczegóły w tym artykule .

melvas
źródło
15

Kilka odpowiedzi tutaj trafiło na właściwe rozwiązanie, gdy napotykasz przytłaczająco niejasny błąd odwoływania się do usługi z pliku klasy: skopiuj informacje o konfiguracji usługi do app.config web.config konsoli lub aplikacji Windows. Jednak żadna z tych odpowiedzi nie pokazuje, co skopiować. Spróbujmy to naprawić.

Oto, co skopiowałem z pliku konfiguracyjnego biblioteki klas do pliku konfiguracyjnego mojej aplikacji konsolowej, aby obejść ten zwariowany błąd dla usługi, którą piszę o nazwie „TranslationServiceOutbound”.

Zasadniczo chcesz wszystko w sekcji 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>

markaaronky
źródło
14

Ten doprowadził mnie do szału.

Używam Silverlight 3 Prism (CAB) z WCF

Kiedy wywołuję usługę WCF w module Prism, pojawia się ten sam błąd:

Nie można znaleźć domyślnego elementu punktu końcowego, który odwołuje się do kontraktu „IMyService” w sekcji konfiguracji klienta modelu usługi. Może to być spowodowane tym, że nie znaleziono pliku konfiguracji dla Twojej aplikacji lub ponieważ element klienta pasujący do tej umowy nie został znaleziony w elemencie klienta

Okazuje się, że szuka w pliku .xap powłoki pliku ServiceReferences.ClientConfig, a nie w pliku ServiceReferences.ClientConfig modułu. Dodałem mój punkt końcowy i powiązanie do istniejącego pliku ServiceReferences.ClientConfig w mojej aplikacji Silverlight Shell (nazywa to swoją własną usługą WCF).

Następnie musiałem przebudować aplikację Shell, aby wygenerować nowy plik .xap dla folderu ClientBin mojego projektu internetowego.

Teraz ten wiersz kodu w końcu działa:

MyServiceClient myService = new MyServiceClient();
Jeff Moeller
źródło
11

Ten błąd pojawiał się w aplikacji ASP.NET, w której usługa WCF została dodana do biblioteki klas, która jest dodawana do aplikacji ASP.NET jako odnośny plik .dll w folderze bin. Aby rozwiązać błąd, ustawienia konfiguracji w pliku app.config w bibliotece klas odwołującej się do usługi WCF musiały zostać skopiowane do ustawień web.config dla strony / aplikacji ASP.NET.

zanderwel
źródło
Podczas gdy inne odpowiedzi mogły opisywać ten sam problem. Ta odpowiedź opisała moją dokładną sytuację i w końcu zrozumiałem problem. Dziękuję za uratowanie mi dnia
Wouter Vanherck
10

Znalazłem (oprócz kopiowania do App.config interfejsu użytkownika, ponieważ korzystałem z interfejsu biblioteki klas) musiałem poprzedzić nazwę powiązania nazwą Service Reference (moja jest ServiceReferenceponiżej).

na przykład:

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

zamiast domyślnie generowanego:

<endpoint address="http://localhost:4000/ServiceName" binding="basicHttpBinding"
      bindingConfiguration="BasicHttpBinding_ISchedulerService"
      contract="ISchedulerService" 
      name="BasicHttpBinding_ISchedulerService" />
Matt Mitchell
źródło
1
Musiałem zrobić to samo. Naprawdę nie rozumiem dlaczego.
Bryg
8

Miałem ten sam problem, ale zmiana przestrzeni nazw kontraktu nie działała dla mnie. Wypróbowałem więc odwołanie do sieci w stylu .Net 2 zamiast odwołania do usługi .Net 3.5. To się udało.

Aby użyć odwołania do sieci w Visual Studio 2008, kliknij „Dodaj odwołanie do usługi”, a następnie „Zaawansowane”, gdy pojawi się okno dialogowe. W tym znajdziesz opcję, która pozwoli ci użyć odwołania do strony internetowej zamiast odwołania do usługi.

Cyril Gupta
źródło
2
To właśnie skończyłem. Chciałbym, żeby problem miał dla mnie sens.
Jarrett Widman
To również działało dla mnie. Teraz mam wszystkie te dodatkowe śmieci w moim rozwiązaniu (Settings.Settings, nowy folder Web References) bez powodu. Będę musiał wrócić i odwiedzić to, gdy będę miał więcej czasu.
Mike K,
Zgoda. Miałem ten sam problem i naprawiłem go, zmieniając go na odwołanie do sieci.
Stephen Hosking
7

Przyczyną tego problemu może być testowanie przez aplikację niebiblioteczną aplikacji korzystającej z usługi.

Informacje, które wprowadzili inni, dotyczą pierwotnej przyczyny tego. Jeśli próbujesz napisać zautomatyzowane przypadki testowe, a testowana jednostka faktycznie wywoła interfejs usługi, musisz dodać odwołanie do usługi do projektu testowego. Jest to smak aplikacji wykorzystującej błąd typu biblioteki. Jednak nie od razu zdałem sobie z tego sprawę, ponieważ mojego kodu używającego interfejsu nie ma w bibliotece . Jednak gdy test faktycznie się uruchomi, będzie on działał z zestawu testowego, a nie z testowanego zestawu.

Dodanie odwołania do usługi do projektu testu jednostkowego rozwiązało mój problem.

PatrickV
źródło
7

Mam sytuację, która w teście jednostkowym. Skopiowałem plik app.config do projektu testu jednostkowego. Tak więc projekt testu jednostkowego zawiera również informacje o punkcie końcowym.


źródło
2
Nie skopiowałem pełnego app.config, ale system.serviceModelsekcja. To wszystko!
kwrl
To samo, tyle że skopiowałem system.serviceModeldo app.config aplikacji konsoli
AlbatrossCafe
5

Raz spotkałem się z tym problemem. Stało się tak, ponieważ wciąż rozwijałem interfejs korzystający z usługi WCF. Skonfigurowałem aplikację testową i kontynuowałem rozwój. Następnie w trakcie projektowania zmieniłem niektóre przestrzenie nazw usług. Więc dwukrotnie sprawdziłem „system.serviceModel -> klient -> punkt końcowy -> kontrakt” w web.config, aby dopasować klasę WCF. Następnie problem został rozwiązany.

vardars
źródło
4

Przestrzeń nazw w konfiguracji powinna odzwierciedlać resztę ścieżki przestrzeni nazw po domyślnej przestrzeni nazw klienta (skonfigurowanej we właściwościach projektu). Na podstawie opublikowanej odpowiedzi domyślam się, że klient jest skonfigurowany w przestrzeni nazw „Fusion.DataExchange.Workflows”. Jeśli przeniesiesz kod klienta do innej przestrzeni nazw, musisz zaktualizować konfigurację, aby pasowała do pozostałej ścieżki przestrzeni nazw.

Chris Porter
źródło
3

Mam ten sam problem. Korzystam z usługi WCF w bibliotece klas i wywołuję bibliotekę klas z projektu aplikacji systemu Windows. Ale zapomniałem o zmianie w <system.serviceModel>pliku <system.serviceModel>konfiguracyjnym aplikacji systemu Windows. Projektuj tak samo jak plik aplikacji.Config biblioteki klas.
rozwiązanie: zmień Konfiguracja projektu zewnętrznego tak samo jak konfiguracja wcf biblioteki klas.

SIDEID Mahomet HASZEM
źródło
3

Cześć, napotkałem ten sam problem, ale najlepszym rozwiązaniem jest pozwolenie .NET na skonfigurowanie konfiguracji po stronie klienta. Odkryłem to, że po dodaniu odwołania do usługi z ciągiem zapytania http: /namespace/service.svc? Wsdl = wsdl0 NIE tworzy punktów końcowych konfiguracji po stronie klienta. Ale gdy usunę? Wsdl-wsdl0 i użyję tylko adresu URL http: /namespace/service.svc, utworzy konfigurację punktu końcowego w pliku konfiguracyjnym klienta. krótko mówiąc „? WSDL = WSDL0”.

Joey
źródło
3

Nie umieszczaj wiersza deklaracji klienta usługi jako pola klasy, zamiast tego utwórz instancję dla każdej metody, która została użyta. Problem zostanie naprawiony. Jeśli utworzysz instancję klienta usługi jako pole klasy, wystąpi błąd czasu projektowania!

Mücahid Uslu
źródło
3

W przypadku korzystania z aplikacji WPF za pomocą frameworka PRISM konfiguracja powinna istnieć w projekcie startowym (tj. W projekcie, w którym znajduje się bootstrapper).

VRK
źródło
2

Ten błąd może wystąpić, jeśli wywołujesz usługę w bibliotece klas i wywołujesz bibliotekę klas z innego projektu.

Manuel Alves
źródło
2

Wydaje się, że istnieje kilka sposobów na stworzenie / rozwiązanie tego problemu. Dla mnie produkt CRM, którego używam, został napisany w natywnym kodzie i jest w stanie wywołać moją bibliotekę DLL .NET, ale natrafiam na informacje o konfiguracji, które muszą znajdować się w głównej aplikacji / powyżej niej. Dla mnie aplikacja CRM nie jest .NET, więc musiałem umieścić ją w moim pliku machine.config (nie tam, gdzie chcę). Ponadto, ponieważ moja firma korzysta z Websense, miałem trudności z dodaniem numeru referencyjnego usługi z powodu problemu z wymaganiem uwierzytelnienia serwera proxy 407, który wymagał modyfikacji pliku machine.cong.

Rozwiązanie proxy:

Aby uruchomić WCF Service Reference, musiałem skopiować informacje z app.config mojej biblioteki DLL do głównej konfiguracji aplikacji (ale dla mnie było to machine.config). Musiałem też skopiować informacje o punkcie końcowym do tego samego pliku. Kiedy to zrobiłem, zaczęło to działać dla mnie.

TPaul
źródło
2

Ok. Moja sprawa była trochę inna, ale w końcu znalazłem naprawę: Mam Console.EXE -> DLL -> Wywoływanie WS1 -> DLL -> Wywoływanie WS2

Mam obie konfiguracje modelu usługi WS1 i WS2 w Console.EXE.config zgodnie z zaleceniami. - nie rozwiązałem problemu.

Ale nadal nie działało, dopóki nie dodałem WebReference WS2 do WS1, a nie tylko do biblioteki DLL, która faktycznie tworzy i wywołuje proxy WS2.

Itay Levin
źródło
2

Jeśli odwołujesz się do usługi sieci Web w bibliotece klas, musisz skopiować plik app.config do aplikacji systemu Windows lub aplikacji konsoli

rozwiązanie: zmień Konfiguracja projektu zewnętrznego tak samo jak konfiguracja wcf biblioteki klas.

Pracował dla mnie

Roshan
źródło
2

Miałem ten sam problem
którego używałem aplikacji komputerowej i korzystałem z usługi Global Weather Web

Usunąłem odwołanie do usługi i dodałem odwołanie do sieci, a problem rozwiązany Dzięki

Kamran Akhter
źródło
2

Rozwiązaniem było dla mnie usunięcie nazwy punktu końcowego z atrybutu Nazwa punktu końcowego w kliencie web.config, co pozwoliło na użycie proxy

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

ćwiczyłem tylko cały dzień. Również nazwa kontraktu była nieprawidłowa po wprowadzeniu tej poprawki, chociaż była błędna, gdy pojawił się błąd początkowy. Dwukrotnie, a następnie potrójnie sprawdź, czy ludzie zawierają nazwy kontraktów !! atrybut: Ian

obrabować
źródło
2

Pozwól mi dodać jeszcze jedną rzecz do wyszukania. ( Tom Haigh's już do niej nawiązuje, ale chcę być wyraźna)

Mój web.configplik ma następujące definicje:

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

Już korzystałem z basicHttpsBinding dla jednego odwołania, ale potem dodałem nowe odwołanie, które wymagało basicHttpBinding (brak s). Wszystko, co musiałem zrobić, to dodać to do mojego protocolMappingw następujący sposób:

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

Jak słusznie zauważa LR , należy to określić we właściwych miejscach. Dla mnie oznaczało to jeden w app.config mojego projektu testu jednostkowego, a także w web.config głównego projektu usługowego.

David
źródło
2

Wystąpił ten błąd, gdy odwoływałem się do kontraktu w elemencie pliku konfiguracyjnego bez operatora zasięgu globalnego.

to znaczy

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

działa, ale

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

daje błąd „Nie można znaleźć domyślnego elementu końcowego, który odwołuje się do umowy”.

Zespół zawierający MyNamepsace.IMyContract znajduje się w innym zestawie niż główna aplikacja, więc może to wyjaśniać potrzebę użycia globalnej rozdzielczości zakresu.

żagiel
źródło
2

Podczas dodawania odwołania do usługi

wprowadź opis zdjęcia tutaj

uważaj na przestrzeń nazw, którą wpisujesz:

wprowadź opis zdjęcia tutaj

Powinieneś dołączyć go do nazwy swojego interfejsu:

<client>
  <endpoint address="http://192.168.100.87:7001/soap/IMySOAPWebService"
            binding="basicHttpBinding" 
            contract="MyNamespace.IMySOAPWebService" />
</client>
Waldemar Gałęzinowski
źródło
2

Wystąpił ten sam błąd i próbowałem wielu rzeczy, ale nie zadziałało, ale zauważyłem, że moja „umowa” nie była taka sama we wszystkich projektach, zmieniłem umowę tak, jak by była taka sama dla wszystkich projektów wewnątrz rozwiązania i działała. To jest projekt A

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

Projekt B:

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

W końcu zmieniłem dla obu, ponieważ:

<client>
    <endpoint address="https://xxxxxxxxxxx" binding="basicHttpBinding" bindingConfiguration="basic" contract="MyServiceReferrence.IIntegrationService" name="basic" />
</client>
nzrytmn
źródło
1

Miałem ten sam problem i został rozwiązany tylko wtedy, gdy aplikacja hosta i dll, który używał tego punktu końcowego, miały tę samą nazwę odwołania do usługi.

srebro
źródło