Мы используем IIS 7 и размещаем около 20 сервисов с привязками net.tcp и net.pipe, и все работает нормально.
Ваша проблема с трубкой мне кажется неверной конфигурацией. Если это помогает, вот как мы их настроили:
Сервер:
<endpoint address ="" binding="fooBinding"
contract="Bla.IBlaAPI"
bindingConfiguration="BlaAPI.BindingConfig">
Конфигурация привязки:
<binding name="BlaAPI.BindingConfig"
receiveTimeout = "10:50:00"
sendTimeout = "10:50:00"
maxReceivedMessageSize="2147483647"
maxBufferSize="2147483647"
maxBufferPoolSize="2147483647"
transactionFlow="false">
<readerQuotas maxDepth="32"
maxStringContentLength="2147483647"
maxArrayLength="2147483647"
maxBytesPerRead="8192"
maxNameTableCharCount="2147483647" />
<security mode="None"/>
</binding>
Обратите внимание, что мы используем длинные тайм-ауты и имеем действительно высокие квоты для размера сообщений и т. Д., Потому что через этот сервис мы пропускаем большие объемы данных. Вы можете настроить для своих нужд. У нас установлено значение безопасности «none», потому что служба связывается только с защищенной локальной машины. Опять же, ваш пробег может отличаться.
Клиент:
<endpoint name="Bla.Bindings.BlaAPI" address="net.pipe://localhost/bla/IBlaAPI.svc"
behaviorConfiguration="BlaAPI.ServiceBehavior"
binding="netNamedPipeBinding" bindingConfiguration="BlaAPI.BindingConfig"
contract="Bla.IBlaAPI" />
Что касается проблемы «Состояние ошибки», обратите внимание, что если во время выполнения служебного кода возникает необработанное исключение, экземпляр службы будет оставаться в состоянии «Ошибка», пока он не закроется должным образом. Чтобы избежать этого, либо обрабатывайте исключения на верхнем уровне службы, либо используйте, например, блоки обработки исключений в Enterprise Library.