Ошибка WCF. Не удалось найти элемент конечной точки по умолчанию, который ссылается на контракт UserService.UserService.

Любые идеи, как это исправить?

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 и работал.

Ответ 1

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

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

Ответ 2

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

Ответ 3

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

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

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

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

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

Ответ 4

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

Шаги:

  • Перейдите в справочную папку службы
  • Развернуть его
  • Щелкните правой кнопкой мыши и выберите ссылку Сервис обновления
  • Обновить веб-конфигурацию

Ответ 5

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

Ответ 6

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

Ответ 7

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

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

contract="UserService.IUserService"

Ответ 8

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

Ответ 9

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

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

Марк

Ответ 10

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

Ответ 11

Придется добавить службу в вызывающий файл App.config, чтобы она работала. Убедитесь, что вы, но это все-таки. Это, похоже, сработало для меня.

Ответ 12

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

Ответ 13

В случае, если вы используете приложение WPF с использованием инфраструктуры PRISM, тогда конфигурация должна существовать в вашем проекте запуска (т.е. в проекте, где находится ваш загрузочный файл).

Короче просто удалите его из библиотеки классов и включите в проект запуска.