Sto provando a configurare i binding net.pipe sul server tra 2 processi (nella stessa casella). Tutto questo funziona localmente in Windows 7, ma sul server di produzione (Windows Server 2008 R2), non funziona.Impossibile ottenere il binding net.pipe che funziona in IIS7.5 su Windows Server 2008 R2
posso verificare che ho:
- Aggiunto un net.pipe legame con il "Sito Web" IIS (aggiunto * come l'informazione).
- Aggiunto net.pipe all'elenco di collegamenti in "impostazioni avanzate" per IIS "Sito Web".
Questo è tutto ciò che era necessario sulla mia macchina di sviluppo. C'è qualcos'altro che devo fare?
L'errore che ottengo è da un semplice client console Test App:
Eccezione non gestita: System.ServiceModel.EndpointNotFoundException: Non c'era nessun punto finale ascolto a net.pipe: //nameOfService.svc che potrebbe accettare il messaggio. Questo è spesso causato da un indirizzo errato o un'azione SOAP. Vedi InnerException, se presente, per maggiori dettagli. ---> System.IO.PipeException: 'net.pipe: //nameOfService.svc' L'endpoint tubo non è stato trovato sul machine.` locale
Ecco alcune configurazioni:
Cliente:
<system.serviceModel>
<bindings>
<netNamedPipeBinding>
<binding name="NetNamedPipeBinding_IWebAppNotifyService">
<security mode="None" />
</binding>
</netNamedPipeBinding>
</bindings>
<client>
<endpoint address="net.pipe://nameOfService.svc"
binding="netNamedPipeBinding" bindingConfiguration="NetNamedPipeBinding_IWebAppNotifyService"
contract="ServiceReference2.IWebAppNotifyService" name="NetNamedPipeBinding_IWebAppNotifyService" />
</client>
</system.serviceModel>
Server:
<bindings>
<netNamedPipeBinding>
<binding name="WebAppNotifyServiceBinding" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" transactionFlow="false" transactionProtocol="OleTransactions" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288" maxBufferSize="65536" maxConnections="10" maxReceivedMessageSize="65536">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
<security mode="None">
</security>
</binding>
<binding name="ScannerManagerCommandBinding">
<security mode="None" />
</binding>
</netNamedPipeBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="WebAppNotifyServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="True" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="MonitoringApp.Notifier.WebAppNotifyService" behaviorConfiguration="WebAppNotifyServiceBehavior">
<host>
<baseAddresses>
<add baseAddress="net.pipe://nameOfService.svc" />
<add baseAddress="http://nameOfService" />
</baseAddresses>
</host>
<endpoint address="" binding="netNamedPipeBinding" bindingConfiguration="WebAppNotifyServiceBinding" contract="X.Y.IWebAppNotifyService" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
Aggiornamento:
012.Il pool di applicazioni associato al sito Web che ospita il binding net.pipe è in esecuzione con l'utente "NetworkService", se ciò fa la differenza.
mi hanno permesso di attivazione non HTTP in Windows Features per NET 3.5.1, anche se questo è in esecuzione in .NET 4.
In Funzionalità di Windows, avete attivato Windows Communication Foundation non-HTTP di attivazione? –
Hai provato a utilizzare WCFTestClient.strumento exe per verificare il tuo servizio? –
Un altro pensiero: come ricorderò, baseAddress dovrebbe seguire questo formato: {PROTOCOL}: // SERVER_NAME/SERVICE_NAME, ho ragione? –