Я создал простую веб-службу WCF (следуя этому руководству: http://blogs.msdn.com/b/ericwhite/archive/2010/05/11/getting-started-building-a-wcf-web-service.aspx), поскольку я не хочу использовать пространство имен по умолчанию, поэтому я определил свое собственное пространство имен в ServiceContract, DataContract, ServiceBehavior и web.config, показанных в http://www.ilovesharepoint.com/2008/07/kill-tempuri-in-wcf-services.html
Когда я использую эту веб-службу WCF, я продолжаю получать InvlidOperationException в объявлении: не удалось найти элемент конечной точки по умолчанию, который ссылается на контракт ABCWcfService.IABCWcfService в разделе конфигурации клиента ServiceModel. Это может быть связано с тем, что для вашего приложения не найден файл конфигурации или потому, что в клиентском элементе не может быть найден элемент конечной точки, соответствующий этому контракту.
Я обнаружил, что причина связана с изменением конечной точки, которое я внес в файл web.config для настраиваемого пространства имен. Пока я включаю конечную точку, в моем клиентском коде будет это исключение.
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<services>
<service behaviorConfiguration="ABCWcfService.ABCWcfServiceBehavior" name="ABCWcfService.SkycityWcfService">
<endpoint bindingNamespace="http://www.ABC.com/ABCWcfService" address="" binding="wsHttpBinding" contract="ABCWcfService.IABCWcfService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="ABCWcfService.ABCWcfServiceBehavior">
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true" />
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
В клиентском коде это просто:
ABCWcfServiceClient abcWcfServiceClient = new ABCWcfServiceClient();
abcWcfServiceClient.GetWhatsOnDataAsync();
abcWcfServiceClient.GetWhatsOnDataCompleted += new EventHandler<GetDataCompletedEventArgs>(ABCWcfServiceClient_GetWDataCompleted);
Я получаю это исключение каждый раз, когда оно переходит в 1-ю строку.
Если я отключу раздел конечных точек в файле web.config, все в порядке.
Кто-нибудь может сказать мне, почему?