Ошибка WCF - не удалось найти элемент конечной точки по умолчанию, который ссылается на контракт 'UserService.UserService' - PullRequest
96 голосов
/ 31 марта 2009

Есть идеи как это исправить?

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-файла ServiceReferences.ClientConfig в основной проект silverlight, и он заработал.

Ответы [ 13 ]

185 голосов
/ 22 октября 2009

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

Решение простое. Скопируйте определения конечной точки из файла конфигурации (например, ServiceReferences.ClientConfig) библиотеки классов в файл конфигурации приложения silverlight. Я знаю, что вы ожидаете, что это сработает без этого, но, очевидно, у кого-то в Редмонде был отпуск в тот день.

44 голосов
/ 18 апреля 2013

Вы также можете установить эти значения программно в библиотеке классов, это позволит избежать ненужного перемещения файлов конфигурации по библиотеке. Пример кода для простого 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);
12 голосов
/ 06 августа 2010

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

У меня была эта ошибка при подключении к веб-службе. Когда мой код был в «основном» решении WPF Application, не проблема, он работал отлично. Но когда я переместил код в более разумное решение на уровне DAL, это вызвало бы исключение.

Не удалось найти элемент конечной точки по умолчанию, который ссылается на контракт «MyWebService.MyServiceSoap» в разделе конфигурации клиента ServiceModel. Это может быть связано с тем, что для вашего приложения не найден файл конфигурации или из-за того, что в клиентском элементе не найден элемент конечной точки, соответствующий этому контракту.

Как было сказано "Sprite" в этой теме, вам необходимо вручную скопировать тег.

Для приложений WPF это означает копирование тега из app.config в моем решении DAL в app.config в основном решении WPF Application.

6 голосов
/ 01 июля 2013

Я столкнулся с той же проблемой, по какой-то причине Visual Studio не обновляла веб-конфигурацию при первом добавлении службы. Я обнаружил, что обновление Service Reference также исправило эту проблему.

Шаги:

  1. Перейдите в папку справочной службы
  2. Развернуть его
  3. Щелкните правой кнопкой мыши и выберите Обновление справочной службы
  4. Наблюдать за обновлением веб-конфигурации
4 голосов
/ 09 июня 2009

Измените web.config службы WCF на «адрес конечной точки =» «binding =« basicHttpBinding »...» (ранее связывание = «wsHttpBinding») После сборки приложения в конфигурации «ServiceReferences.ClientConfig» «» имеет значение. Тогда все будет работать нормально.

3 голосов
/ 29 ноября 2010

Переименуйте файл output.config, созданный svcutil.exe, в app.config. у меня это сработало.

2 голосов
/ 31 марта 2009

Есть ли у вас интерфейс, который реализует ваш класс UserService.

Ваши конечные точки должны указывать интерфейс для атрибута контракта:

contract="UserService.IUserService"
1 голос
/ 31 марта 2009

Не уверен, что это действительно проблема, но я вижу, что у вас такое же имя для вашей конфигурации привязки ().

Обычно я пытаюсь назвать свои конечные точки как-то вроде «UserServiceBasicHttp» или что-то подобное («Связывание» здесь на самом деле не имеет ничего общего), и я пытаюсь вызвать мои конфигурации привязки как-нибудь с помощью «.... например, «UserServiceDefaultBinding», чтобы избежать возможных конфликтов имен.

Марк

1 голос
/ 31 марта 2009

Не уверен, если это проблема. Конечная точка и привязка имеют одинаковое имя

0 голосов
/ 10 мая 2017

Для тех, кто работает со службами AX 2012 AIF и пытается вызвать туда C # или VB проект внутри AX (x ++) и страдает от таких ошибок ", не может найти конечную точку по умолчанию " ... или " контракт не найден " ... Вернитесь в проект Visual Studio (C #) и добавьте эти строки перед определением клиента службы, затем разверните проект и перезапустите клиент 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...