Я пытаюсь создать внутрипроцессный модульный тест для взаимодействия моей службы с клиентом, используя привязку net.pipe. Как и хорошая служба WCF, он использует атрибут FaultContractAttribute для операций службы, чтобы выявить возможные ошибки (обернутые исключения) для метаданных. Я хотел бы, чтобы конечные точки клиента и службы были настроены с помощью XML (App.config). Однако всякий раз, когда возникает ошибка, это просто исключение CommunicationException «канал закрыт», а не типизированная ошибка I. ожидал.
System.ServiceModel.CommunicationException: There was an error reading from the pipe: The pipe has been ended. (109, 0x6d).
Я попытался добавить конечную точку IMetadataExchange для net.pipe, но это не сработало. Я тоже пробовал. То, что было в Vista, потребовало, чтобы я переписал ACL для конечной точки http. Это тоже не сработало.
Пользовательский класс исключения:
public class ValidationException : ApplicationException { }
Это последняя попытка конфигурации, но она выдает «Имя контракта 'IMetadataExchange' не может быть найдено в списке контрактов, реализованных службой»
Любые ссылки на примеры или рекомендации о том, как это сделать, будут оценены.
<system.serviceModel>
<client>
<endpoint name="Client"
contract="IService"
address="net.pipe://localhost/ServiceTest/"
binding="netNamedPipeBinding"
bindingConfiguration="netPipeBindingConfig" />
</client>
<services>
<service
name="Service"
behaviorConfiguration="ServiceFaults">
<host>
<baseAddresses>
<add baseAddress="net.pipe://localhost/ServiceTest/"/>
<add baseAddress="http://localhost/ServiceTest/"/>
</baseAddresses>
</host>
<endpoint
address=""
binding="netNamedPipeBinding"
bindingConfiguration="netPipeBindingConfig"
name="ServicePipe"
contract="IService" />
<endpoint
address="MEX"
binding="mexNamedPipeBinding"
bindingConfiguration="mexNetPipeBindingConfig"
name="MexUserServicePipe"
contract="IMetadataExchange" />
</service>
</services>
<bindings>
<netNamedPipeBinding>
<binding name="netPipeBindingConfig"
closeTimeout="00:30:00"
sendTimeout="00:30:00" />
</netNamedPipeBinding>
<mexNamedPipeBinding>
<binding name="mexNetPipeBindingConfig"></binding>
</mexNamedPipeBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceFaults">
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
<behavior name="MEX">
<serviceMetadata
httpGetEnabled="true"
httpGetUrl="http://localhost/ServiceTest/MEX"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>