У меня странная проблема. Мой сервисный сертификат хранится в localMachine / Personal.
И на него ссылаются как,
<serviceCredentials>
<serviceCertificate findValue="TestCertificate56" storeLocation="LocalMachine" storeName="My" x509FindType="FindByIssuerName" />
</serviceCredentials>
Когда сертификат установлен, все работает нормально, без прав на повышение прав при запуске. После перезагрузки компьютера клиент неожиданно перестает подключаться, поскольку служба завершает сокет при подключении
System.ServiceModel.CommunicationException: The socket connection was aborted. This could be caused by an error processing your message or a receive timeout being exceeded by the remote host, or an underlying network resource issue. Local socket timeout was '00:10:00'. ---> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host
at System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
at System.ServiceModel.Channels.SocketConnection.ReadCore(Byte[] buffer, Int32 offset, Int32 size, TimeSpan timeout, Boolean closing)
--- End of inner exception stack trace ---
На стороне службы нет сообщения об ошибке. Если я запускаю сервис в повышенном режиме, это не проблема. Также, если я переустановлю сертификат, он будет работать до следующего перезапуска. Также, если используется хранилище CurrentUser, проблем нет.
Почему это проблема? Моя служба будет развернута и запущена как пользователь NetworkService, поэтому я считаю, что ей нужен ее сертификат в хранилище LocalMachine, а не в хранилище CurrentUser. У моей службы не будет прав администратора, поэтому проблема снова появится в рабочей среде
Редактировать: Я повторил проблему на двух разных компьютерах с VS 2017 и 2019