Я создал службу WCF, и режим безопасности был установлен на Transport
, а ClientCredentialType
— на Windows
. Ниже мой клиентский код:
NetTcpBinding binding = new NetTcpBinding();
binding.Security.Mode = SecurityMode.Transport;
binding.Security.Transport.ClientCredentialType = TcpClientCredentialType.Windows;
binding.Security.Transport.ProtectionLevel = System.Net.Security.ProtectionLevel.EncryptAndSign;
ChannelFactory<IServices> factory factory = new ChannelFactory<IServices>(binding, service);
NetworkCredential credential = factory.Credentials.Windows.ClientCredential;
credential.UserName = string.Empty;
credential.Password = string.Empty;
IServices connect = factory.CreateChannel();
bResult = connect.IsServerOnline();
Конфигурация сервера:
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="tcpConSecure" />
<security mode="Transport">
<transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
</security>
</binding>
</netTcpBinding>
</bindings>
<services>
<service name="TestService.Services">
<endpoint address="tcp" behaviorConfiguration="EndpointBe" binding="netTcpBinding" bindingConfiguration="tcpConSecure" contract="TestServiceInterface.IServices" />
</service>
</services>
</system.serviceModel>
Теоретически я должен ввести правильное имя и пароль учетной записи Windows, но во время теста я обнаружил, что могу установить UserName
и Password
как empty
, и канал все еще может быть создан. Почему?
Клиент и сервер находятся не на одном компьютере, а в одном домене. Учетная запись для входа на клиентском компьютере может войти в систему на серверном компьютере. В этом случае я мог бы использовать пустое имя пользователя и пароль для создания соединения и вызова службы WCF.