У меня есть служба WCF, которая я проверена, скопировав ее интерфейсы в примерный проект клиента.
Теперь я хочу работать правильно, добавив ссылку на службу.
Служба размещается в хостинге Windows (с помощью installUtil
).
Услуга имеет 2 проекта - внешние (интерфейсы + данные) и внутренние элементы (реализации).
По какой-то причине у него не было app.config, поэтому я добавил его вручную:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<services>
<service name="ExecutionService" behaviorConfiguration="Default">
<endpoint name="TCPEndpoint" address="" binding ="netTcpBinding" contract="Externals.IExecutionService"/>
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:3040/ExecutionService"/>
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="Default">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
Попытка добавить ссылку на службу из моего примера клиента вызывает следующую ошибку:
Metadata contains a reference that cannot be resolved: 'net.tcp://localhost:3040/ExecutionService/Externals.IExecutionService'.
There was no endpoint listening at net.tcp://localhost:3040/ExecutionService/Externals.IExecutionService that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details.
If the service is defined in the current solution, try building the solution and adding the service reference again.
Я видел здесь, что нет необходимости в app.config.
Я немного смущен, и я начинаю с WCF
.
Как приложение nice WPF
ссылается на мою службу? Я хочу, чтобы служба была оконной, и я не хочу перетаскивать DLL со мной.
Edit
Я добавил конечную точку метаданных, и мой appconfig теперь выглядит следующим образом:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<services>
<service name="ExecutionService" behaviorConfiguration="Default">
<endpoint name="TCPEndpoint"
address=""
binding ="netTcpBinding"
contract="Externals.IExecutionService"/>
<endpoint address="mex"
binding="maxHttpBinding"
contract="Externals.IExecutionService"/>
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:3040/ExecutionService"/>
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="Default">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
Я попытался добавить ссылку на службу с помощью net.tcp://localhost:3040/ExecutionService
, net.tcp://localhost:3040/ExecutionService/Externals
и net.tcp://localhost:3040/ExecutionService/Externals/IExecutionService
, и я все равно получаю ту же ошибку.