Я пытаюсь создать две службы WCF, которые должны иметь доступ друг к другу. Однако я получаю это сообщение об ошибке: На сервере возникла ошибка при обработке запроса. Сообщение об исключении: «Не удалось найти элемент конечной точки по умолчанию, который ссылается на контракт« AddonWCFService.IService1 »в разделе конфигурации клиента ServiceModel. Возможно, это связано с тем, что файл конфигурации не найден для вашего приложения или потому, что в элементе клиента не может найти элемент конечной точки, соответствующий этому контракту. '.Служба не может найти конечную точку другой службы в WCF
я называю метод Test() из этой службы
namespace CustomersService
{
[ServiceContract]
public interface ICustomers
{
[OperationContract]
[WebGet]
string Test();
}
public class Customers : ICustomers
{
private int m_i = 0;
public int GetCounter()
{
return m_i;
}
public void Test()
{
AddonWCFService.Service1Client foo = new AddonWCFService.Service1Client();
}
}
}
другой сервис
namespace AddonWCFWebservice
{
[ServiceContract]
public interface IService1
{
[OperationContract]
void Init();
}
public class Service1 : IService1
{
public void Init()
{
}
}
}
Мой WebConfig:
<?xml version="1.0"?>
<configuration>
<system.serviceModel>
<services>
<service behaviorConfiguration="MyserviceBehavior" name="CustomersService.Customers">
<endpoint name="ws" address="ws" binding="wsHttpBinding" contract="CustomersService.ICustomers"/>
<endpoint name=""
address=""
binding="webHttpBinding"
contract="CustomersService.ICustomers"
behaviorConfiguration="WebBehavior"/>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
<service name="AddonWCFWebservice.Service1" behaviorConfiguration="MyserviceBehavior">
<endpoint address="" binding="wsHttpBinding" contract="AddonWCFWebservice.IService1"/>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="MyserviceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="WebBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
<system.web>
<compilation debug="true"/>
<customErrors mode="Off"/>
</system.web>
</configuration>
Обе службы находятся в одной и той же активной директории IIS. Я добавил ссылку на службу на проекты VS C#, используя веб-URL, например, http://www.foobar.baz/Test/Service1.svc и http://www.foobar.baz/Test/Customers.svc
Это, наверное, что-то очевидное, но я довольно новичок во всем бизнесе WCF. Благодаря!
Обновление: Решение заключалось в том, чтобы добавить клиентский раздел в мой webconfig. Кроме того, я использовал basicHttpBinding поверх wsHttpBinding, потому что моя безопасность будет отменена в другом месте, потому что это общедоступная служба. Я должен был соответствовать связывании клиента к связыванию разделе услуг: как BasicHttpBinding
<?xml version="1.0"?>
<configuration>
<system.serviceModel>
<client>
<endpoint
name=""
address="http://demo.mydomain.baz/TestService/Service1.svc"
binding="basicHttpBinding"
contract="AddonWCFService.IService1" />
</client>
<services>
<service behaviorConfiguration="MyserviceBehavior" name="CustomersService.Customers">
<endpoint name="ws" address="ws" binding="wsHttpBinding" contract="CustomersService.ICustomers"/>
<endpoint name=""
address=""
binding="webHttpBinding"
contract="CustomersService.ICustomers"
behaviorConfiguration="WebBehavior"/>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
<service name="AddonWCFWebservice.Service1" behaviorConfiguration="MyserviceBehavior">
<endpoint address="" binding="basicHttpBinding" contract="AddonWCFWebservice.IService1"/>
<!--
<endpoint address=""
binding="webHttpBinding"
contract="AddonWCFWebservice.IService1"
behaviorConfiguration="WebBehavior"/>
-->
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="MyserviceBehavior">
<!-- 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="true"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="WebBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
<system.web>
<compilation debug="true"/>
<customErrors mode="Off"/>
</system.web>
</configuration>
Правильно! Спасибо! Это сделал трюк. Не знал, что есть раздел клиента. Теперь я понимаю сообщение об ошибке, на самом деле совершенно ясно: «[...] раздел конфигурации клиента ServiceModel».Теперь, чтобы выяснить, как решить эту ошибку: «Конечная точка ChannelFactory должна иметь действительный адрес» – Nebula
. Благодаря этому ответу мой код действительно работает прямо сейчас, см. Решение в вопросе. – Nebula