Помилка WCF - не вдалося знайти елемент кінцевої точки за замовчуванням, на який посилається договір "UserService.UserService"


98

Будь-які ідеї, як це виправити?

UserService.UserServiceClient userServiceClient = new UserServiceClient();
            userServiceClient.GetUsersCompleted += new EventHandler<GetUsersCompletedEventArgs>(userServiceClient_GetUsersCompleted);
            userServiceClient.GetUsersAsync(searchString);

.

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="BasicHttpBinding_UserService" 
                     maxBufferSize="2147483647" 
                     maxReceivedMessageSize="2147483647">
                <security mode="None" />
            </binding>
        </basicHttpBinding>
    </bindings>
    <client>
        <endpoint address="http://localhost:52185/UserService.svc" 
                  binding="basicHttpBinding" 
                  bindingConfiguration="BasicHttpBinding_UserService" 
                  contract="UserService.UserService"
                  name="BasicHttpBinding_UserService" />
    </client>
    <behaviors>
        <serviceBehaviors>
            <behavior name="Shell.Silverlight.Web.Service3Behavior">
                <serviceMetadata httpGetEnabled="true" />
                <serviceDebug includeExceptionDetailInFaults="false" />
            </behavior>
        </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
    <services>
        <service behaviorConfiguration="Shell.Silverlight.Web.Service3Behavior" 
                 name="Shell.Silverlight.Web.Service3">
            <endpoint address="" 
                      binding="basicHttpBinding" 
                      contract="Shell.Silverlight.Web.Service3" />
            <endpoint address="mex" 
                      binding="mexHttpBinding" 
                      contract="IMetadataExchange" />
        </service>
    </services>
</system.serviceModel>

Не вдалося знайти елемент кінцевої точки за замовчуванням, на який посилається контракт "UserService.UserService", у розділі конфігурації клієнта ServiceModel. Це може бути тому, що для вашої програми не знайдено файлу конфігурації або тому, що в елементі клієнта не було знайдено жодного елемента кінцевої точки, що відповідає цьому контракту.

Вирішено!

Я не згадував, що це була програма Silverlight. У мене була посилання на wcf у DLL, яка мала власний файл "ServiceReferences.ClientConfig". Я перемістив вміст DLL's ServiceReferences.ClientConfig до основного проекту Silverlight, і він спрацював.


що робити, якщо програма, що працює з DLL, є стороною, наприклад, DLL є плагіном для іншого додатка?
Стефанос Каргас

Відповіді:


186

Я зіткнувся з тією ж проблемою. Моя програма також була програмою Silverlight, і послугу викликали з бібліотеки класів із користувацьким UserControl, який використовується в ній.

Рішення просте. Скопіюйте визначення кінцевих точок з конфігураційного файла (наприклад, ServiceReferences.ClientConfig) бібліотеки класів у конфігураційний файл програми Silverlight. Я знаю, що ти очікуєш, що це спрацює, не маючи цього робити, але, мабуть, хтось із Редмонда в цей день відпочив.


50
Це рішення справедливо і для проектів ASP.NET та MVC. Якщо ви додаєте послугу до бібліотеки класів, це поле не вийде, виберіть розділ system.serviceModel з програми app.config у вашому проекті бібліотеки та помістіть його у свій web.config.
Адам Папа

5
Схоже, це стосується будь-якого проекту, я використовував quartz.net як сервіс Windows і мав роботу над іншою збіркою, на яку посилався веб-сервіс. Це працювало і для мене. Дякую.
тіаголеїт

2
Привіт, він працював і для проекту Windows Phone. Як говорить @thiagoleite, здається, він працює для більшості типів проектів.
Танушка

3
+1 для канікул у відпустці Редмонда ... У будь-якому випадку, чи є спосіб додати його як зовнішній файл, а не грати з web.config?
Шиммі Вайцхандлер

1
@sprite Я в кінцевому підсумку встановив потрібні налаштування в коді (я перемінив конструктор клієнта), як відповідь Вішаля . Таким чином він отримує доставку через всі збори. Дякую!
Шиммі Вайцхандлер

45

Ви також можете встановити ці значення програмно в бібліотеці класів, це дозволить уникнути зайвого руху конфігураційних файлів по всій бібліотеці. Приклад коду для простого BasciHttpBinding -

BasicHttpBinding basicHttpbinding = new BasicHttpBinding(BasicHttpSecurityMode.None);
basicHttpbinding.Name = "BasicHttpBinding_YourName";
basicHttpbinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
basicHttpbinding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName;

EndpointAddress endpointAddress = new EndpointAddress("http://<Your machine>/Service1/Service1.svc");
Service1Client proxyClient = new Service1Client(basicHttpbinding,endpointAddress);

@wooncherk, у моїй бібліотеці класів є лише посилання на wsdl. Де я повинен поставити цей код? Я будую його в C # dll і вкладаю dll у свої файли програм, де я посилаюсь на нього з IronPython. Дякую
Срба

12

На всякий випадок, коли хтось потрапить на ту ж проблему, використовуючи WPF (а не WCF або Silverlight):

У мене виникла помилка під час підключення до веб-сервісу. Коли мій код знаходився в "головному" рішенні програми WPF Application, немає проблем, він працював чудово. Але коли я перемістив код на більш розумне рішення DAL-шару, він би кинув виняток.

Не вдалося знайти елемент кінцевої точки за замовчуванням, на який посилається контракт "MyWebService.MyServiceSoap" у розділі конфігурації клієнта ServiceModel. Це може бути тому, що для вашої програми не знайдено файлу конфігурації або тому, що в елементі клієнта не було знайдено жодного елемента кінцевої точки, що відповідає цьому контракту.

Як було зазначено "Sprite" у цій темі, вам потрібно вручну скопіювати тег.

Для програм WPF це означає скопіювати тег з app.config в моєму DAL-рішенні до app.config в головному рішенні програми WPF.


це чудово, але було б краще, як короткий коментар під моєю власною відповіддю, як і "Адам Папа". Це прочитає набагато більше людей.
спрайт

2
@sprite: Я б додав коментар, але коментарі StackOverflow завжди відображаються як лише один довгий абзац. Якщо відповідь у 5 абзацах, як у мене, це призвело б до одного довгого, нечитабельного, недружнього абзацу. Написання окремої відповіді дозволило мені дати більш чітку відповідь, що, швидше за все, допоможе іншим користувачам (що, припустимо, це суть таких веб-сайтів)
Майк Гледхілл

6

Я зіткнувся з тією ж проблемою, з якої причини Visual Studio не оновлював веб-конфігурацію, коли я вперше додав послугу. Я виявив, що оновлення довідника про послуги також вирішило цю проблему.

Кроки:

  1. Перейдіть до папки довідника служби
  2. Розгорніть його
  3. Клацніть правою кнопкою миші та виберіть довідку служби оновлення
  4. Слідкуйте за тим, щоб веб-налаштування було оновлено

Так, це зробило для мене трюк. Я використовую посилання на службу wsdl сторонніх служб і отримував цю помилку, поки я не оновив посилання на службу
ejhost

Для мене також. Це було очевидно, оскільки він працює чудово і раптом ні. Можливо, я змінив і не оновив посилання на службу.
ах

4

Змініть web.config служби WCF як "endpoint address =" "inding = "basicHttpBinding" ... "(раніше прив'язка =" wsHttpBinding ") Після створення програми в" ServiceReferences.ClientConfig "" "конфігурація> має значення . Тоді це буде добре працювати.


3

Перейменуйте вихід.config, створений svcutil.exe, на app.config. це працювало на мене.


2

Чи є у вас інтерфейс, який реалізує ваш клас "UserService".

Ваші кінцеві точки повинні визначати інтерфейс для атрибута контракту:

contract="UserService.IUserService"


1

Не впевнений, чи справді це проблема, але я бачу, що ви маєте те саме ім’я для своєї конфігурації прив'язки ().

Я зазвичай намагаюся викликати свої кінцеві точки чимось на кшталт "UserServiceBasicHttp" або щось подібне ("Прив'язка" насправді тут нічого не робить), і я намагаюся називати свої конфігурації прив'язки чимось ".... Конфігурація", наприклад "UserServiceDefaultBinding", щоб уникнути можливих зіткнень з іменами.

Марк


0

Довелося додати службу у викликовий файл App.config, щоб вона працювала. Переконайтесь, що ви, але все-таки це. Це, здавалося, працює для мене.


0

Ця проблема виникає, коли ви користуєтесь вашою послугою через інший додаток. Якщо програма має конфігураційний файл, просто додайте до цього файлу інформацію про конфігурацію служби. У моїй ситуації не було жодного конфігураційного файлу, тому я використовую цю техніку, і вона справно працює. Просто збережіть URL-адресу в додатку, прочитайте її та за допомогою методу BasicHttpBinding () відправте її в сервісну програму як параметр. Це проста демонстрація того, як я це зробив це:

Configuration config = new Configuration(dataRowSet[0]["ServiceUrl"].ToString());

var remoteAddress = new System.ServiceModel.EndpointAddress(config.Url);


SimpleService.PayPointSoapClient client = 
    new SimpleService.PayPointSoapClient(new System.ServiceModel.BasicHttpBinding(), 
    remoteAddress);
SimpleService.AccountcredResponse response = client.AccountCred(request);

0

Для тих, хто працює з послугами AIF 2012 AX і намагається зателефонувати туди на проект C # або VB всередині AX (x ++) і страждає від таких помилок "не вдалося знайти кінцеву точку за замовчуванням" ... або "контракту не знайдено" ... поверніться назад до вашої візуальної студії (з #) проектом і додати ці рядки перед визначенням свого клієнта служби, а потім розгорнути проект і перезапуск клієнта AX і повтор: Примітка, приклад для NetTcp адаптера , ви можете легко використовувати будь-який інший адаптер замість згідно вашої потреби .

 Uri Address = new Uri("net.tcp://your-server:Port>/DynamicsAx/Services/your-port-name");
 NetTcpBinding Binding = new NetTcpBinding();
 EndpointAddress EndPointAddr = new EndpointAddress(Address);
 SalesOrderServiceClient Client = new SalesOrderServiceClient(Binding, EndPointAddr);

-2

Якщо ви використовуєте додаток WPF, використовуючи рамку PRISM, то конфігурація повинна існувати у вашому проекті запуску (тобто в проекті, де знаходиться ваш завантажувач.)

Коротше кажучи, просто видаліть його з бібліотеки класів і поставте в стартовий проект.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.