Dla wielu którzy mieli do czynienia z WCF pytanie może wydać się banalne, ale ja nie mogę tego przejść :/
Mianowicie: Mam dwa komputery w jednej sieci lokalnej. Jeden widzi drugiego i odwrotnie. Na jednym mam zainstalowaną usługę windows, która hostuje serwis WCF poprzez binding netTCP (ponieżej kod z konfiguracji na serwerze):
<binding name="BufferedNetTcpBinding" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions" hostNameComparisonMode="StrongWildcard" listenBacklog="10" maxBufferPoolSize="524288" maxBufferSize="65536" maxConnections="10" maxReceivedMessageSize="65536">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/>
<reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false"/>
<security mode="Transport">
<transport clientCredentialType="Windows" protectionLevel="EncryptAndSign"/>
</security>
</binding>
...
<service behaviorConfiguration="WcfServices.EmailBehavior" name="MyProgram.WcfServices.Email.Email">
<endpoint address="" binding="netTcpBinding" bindingConfiguration="StreamedNetTcpBinding" contract="MyProgram.WcfServices.Email.IEmail">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange"/>
<host>
<baseAddresses>
<add baseAddress="net.tcp://192.168.2.101:8523/Email"/>
</baseAddresses>
</host>
</service>
...
<behavior name="WcfServices.EmailBehavior">
<serviceMetadata httpGetEnabled="False"/>
<serviceDebug includeExceptionDetailInFaults="True"/>
</behavior>
Jak widać podaje adres komputera w sieci lokalnej: <add baseAddress="net.tcp://192.168.2.101:8523/Email"/>
Drugi komputer: Stworzyłem program , który ma korzystać z tego serwisu. Jednak nie może się z nim połączyć przez błąd:
Nie można nawiązać połączenia ponieważ komputer docelowy aktywnie go odmawia 127.0.0.1:8523
Oto konfiguracja klienta:
<binding name="NetTcpBinding_IEmail" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:30:00"
transactionFlow="false" transferMode="Streamed" transactionProtocol="OleTransactions"
hostNameComparisonMode="StrongWildcard" listenBacklog="10"
maxBufferPoolSize="524288" maxBufferSize="65536" maxConnections="10"
maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="32" maxStringContentLength="2147483647"
maxArrayLength="2147483647" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<reliableSession ordered="true" inactivityTimeout="00:10:00"
enabled="false" />
<security mode="None">
<transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
<message clientCredentialType="Windows" />
</security>
</binding>
...
<endpoint address="net.tcp://192.168.2.101:8523/Email" binding="netTcpBinding"
bindingConfiguration="NetTcpBinding_IEmail" contract="ServiceEmail.IEmail"
name="NetTcpBinding_IEmail">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
Co mam zrobić, aby korzystać z usługi na innym komputerze w sieci ? Coś z uwierzytelnianiem ? Coś z ustawieniem samego windows ? firewall ? Nie wiem.. co jeszcze może być źle :/