Wcf использует nettcpbinding в рабочей группе
Я разработал WCF службы Windows с помощью сетевого протокола TCP привязки. Он прекрасно работает, когда клиент wcf и служба wcf находятся в домене (в двух разных системах)
Получение ошибки, когда обе системы находятся в рабочей группе, а не в домене
пожалуйста, подскажите, какую конфигурацию мне нужно изменить.
Цитата:Ошибка :Система.Модель обслуживания.CommunicationException: соединение сокета было прервано. Это может быть вызвано ошибкой обработки Вашего сообщения или превышением таймаута приема удаленным хостом, а также основной проблемой сетевых ресурсов. Тайм-аут локального сокета был '00:29:59.9687496'. ---> System.Net.Sockets.SocketException: существующее соединение было принудительно закрыто удаленным хостом
Я использую аутентификацию сертификата и сообщение вместо транспорта
Клиент
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.serviceModel> <client> <endpoint kind="discoveryEndpoint" address="net.tcp://localhost:8005/Probe" binding="netTcpBinding" bindingConfiguration="RequestReplyNetTcpBinding"> </endpoint> <endpoint binding="netTcpBinding" bindingConfiguration="RequestReplyNetTcpBinding" contract="Test2ServLib.IService1" behaviorConfiguration="LargeEndpointBehavior"> <identity> <dns value="WCFServer" /> </identity> <!--The behaviorConfiguration is required to enable WCF deserialization of large data sets --> </endpoint> </client> <behaviors> <endpointBehaviors> <behavior name="disableEndpointDiscovery"> <endpointDiscovery enabled="false" /> <!--The behavior is required to enable WCF deserialization of large data sets --> <dataContractSerializer maxItemsInObjectGraph="2147483647" /> <clientCredentials> <clientCertificate findValue="WCFClient" storeLocation="LocalMachine" storeName="TrustedPeople" x509FindType="FindBySubjectName" /> <serviceCertificate > <authentication certificateValidationMode="PeerTrust" revocationMode="NoCheck"/> </serviceCertificate> </clientCredentials> </behavior> <behavior name="LargeEndpointBehavior"> <!--The behavior is required to enable WCF deserialization of large data sets --> <dataContractSerializer maxItemsInObjectGraph="2147483647" /> <clientCredentials> <clientCertificate findValue="WCFClient" storeLocation="LocalMachine" storeName="TrustedPeople" x509FindType="FindBySubjectName" /> <serviceCertificate > <authentication certificateValidationMode="PeerTrust" revocationMode="NoCheck"/> </serviceCertificate> </clientCredentials> </behavior> </endpointBehaviors> </behaviors> <bindings> <netTcpBinding> <binding name="RequestReplyNetTcpBinding" receiveTimeout="05:00:00" openTimeout="00:00:59" closeTimeout="00:00:59" maxBufferPoolSize="524288" maxBufferSize="25000000" maxConnections="50" maxReceivedMessageSize="25000000" sendTimeout="00:05:00" listenBacklog="1500"> <reliableSession ordered="false" inactivityTimeout="00:01:00" enabled="true" /> <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> <security> <message clientCredentialType="Certificate"/> </security> </binding> </netTcpBinding> </bindings> </system.serviceModel> </configuration>
Обслуживание Конфигурации
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.serviceModel> <behaviors> <serviceBehaviors> <behavior name="announcementBehavior"> <!--The following behavior attribute is required to enable WCF serialization of large data sets --> <dataContractSerializer maxItemsInObjectGraph="2147483647"/> <serviceDiscovery> <announcementEndpoints> <endpoint kind="announcementEndpoint" address="net.tcp://localhost:8005/Announcement" binding="netTcpBinding" bindingConfiguration="RequestReplyNetTcpBinding"/> </announcementEndpoints> </serviceDiscovery> <serviceThrottling maxConcurrentCalls="1500" maxConcurrentSessions="1500" maxConcurrentInstances="1500"/> <serviceCredentials> <serviceCertificate findValue="WCFServer" storeLocation="LocalMachine" storeName="TrustedPeople" x509FindType="FindBySubjectName" /> <clientCertificate> <authentication certificateValidationMode="PeerTrust" trustedStoreLocation="LocalMachine" revocationMode="NoCheck"/> </clientCertificate> </serviceCredentials> </behavior> </serviceBehaviors> </behaviors> <service name="Test2ServLib.IService1" behaviorConfiguration="announcementBehavior"> <host> <baseAddresses> <add baseAddress="net.tcp://localhost:8006/Service1"/> </baseAddresses> </host> <endpoint binding="netTcpBinding" bindingConfiguration="RequestReplyNetTcpBinding" contract="Test2ServLib.IService1" behaviorConfiguration="LargeEndpointBehavior" /> <bindings> <netTcpBinding> <binding name = "RequestReplyNetTcpBinding"> <security> <message clientCredentialType="Certificate" /> </security> </binding> </netTcpBinding> </bindings> </system.serviceModel> </configuration>
Что я уже пробовал:
Увеличение времени ожидания, установка режима безопасности на нет
Посмотрел на эти похожие обсуждения для настройки конфигурации:
Соединение с розеткой было прервано. Это может быть вызвано ошибкой обработки Вашего сообщения или превышением таймаута приема удаленным хостом | www.code-geek.com
Служба Windows WCF с использованием NetTCPbinding
служба net.tcp wcf (размещенная служба windows) на сервере домена и клиенте вне домена - переполнение стека
Исключение сокета - WCF