Связь с WCF с ClientCredentialsC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Связь с WCF с ClientCredentials

Сообщение Anonymous »

у меня есть проблема, когда я пытаюсь использовать WCF с безопасностью. appid = {appguid} "< /p>
В приложении на стороне сервера (на ПК с Windows 11) я создал хост с этим: < /p>
ServiceHost shRet = null;
NetTcpBinding binding = new NetTcpBinding();
binding.Name = "CodeNetTcpBinding1";
binding.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard;
binding.Security.Mode = SecurityMode.TransportWithMessageCredentials;
binding.Security.Message.ClientCredentialType = MessageCredentialType.UserName;
binding.TransferMode = TransferMode.Streamed;

address = string.Format("net.tcp://{0}:{1}/ServiceTest", "PCNAME", "49152");
baseAddress = new Uri(address);
shRet = new ServiceHost(typeof(WCFService.GrossingService), baseAddress);
shRet.Description.Behaviors.Add(new System.ServiceModel.Description.ServiceMetadataBehavior() { HttpGetEnabled = false, HttpsGetEnabled = false });
shRet.Credentials.ServiceCertificate.SetCertificate(System.Security.Cryptography.X509Certificates.StoreLocation.LocalMachine, System.Security.Cryptography.X509Certificates.StoreName.Root, System.Security.Cryptography.X509Certificates.X509FindType.FindBySubjectName, "PCNAME");
shRet.Credentials.ClientCertificate.SetCertificate(System.Security.Cryptography.X509Certificates.StoreLocation.LocalMachine, System.Security.Cryptography.X509Certificates.StoreName.Root, System.Security.Cryptography.X509Certificates.X509FindType.FindBySubjectName, "PCNAME");

shRet.Credentials.UserNameAuthentication.UserNamePasswordValidationMode = System.ServiceModel.Security.UserNamePasswordValidationMode.Custom;
shRet.Credentials.UserNameAuthentication.CustomUserNamePasswordValidator = new Validation.MyUserNameValidator();
shRet.AddServiceEndpoint(typeof(WcfService.IMilewatchGrossingService), binding, "");
shRet.AddServiceEndpoint(typeof(WcfService.IMilewatchGrossingDeviceService), binding, "");
shRet.AddServiceEndpoint(typeof(System.ServiceModel.Description.IMetadataExchange), mexTcpBinding, "mex");
< /code>
Проверка является следующим классом: < /p>
using System.IdentityModel.Selectors;
using System.IdentityModel.Tokens;

namespace Validation
{
public class MyUserNameValidator : UserNamePasswordValidator
{
public override void Validate(string userName, string password)
{
if (userName != "TestUser" || password != "ABC")
throw new SecurityTokenException("User or password not valid");
}
}
}
< /code>
, в то время как часть на стороне клиента следующая: < /p>
System.ServiceModel.NetTcpBinding binding = new System.ServiceModel.NetTcpBinding();
binding.Name = "CodeNetTcpBinding1";
binding.HostNameComparisonMode = System.ServiceModel.HostNameComparisonMode.StrongWildcard;
binding.Security.Mode = System.ServiceModel.SecurityMode.TransportWithMessageCredential;
binding.Security.Message.ClientCredentialType = System.ServiceModel.MessageCredentialType.UserName;
binding.TransferMode = System.ServiceModel.TransferMode.Streamed;
address = string.Format("net.tcp://{0}:{1}/ServiceTest", "PCNAME", "49152");
epAddress = new System.ServiceModel.EndpointAddress(address);

Program.ServiceClient = new ServiceClient(binding, epAddress);

Program.ServiceClient.ClientCredentials.ClientCertificate.SetCertificate(System.Security.Cryptography.X509Certificates.StoreLocation.LocalMachine, System.Security.Cryptography.X509Certificates.StoreName.Root, System.Security.Cryptography.X509Certificates.X509FindType.FindBySubjectName, "PCNAME");

Program.ServiceClient.ClientCredentials.UserName.UserName = "TestUser";
Program.ServiceClient.ClientCredentials.UserName.Password = "ABC";

try
{
Program.ServiceClient.Open();
Program.ServiceClient.InnerChannel.OperationTimeout = new TimeSpan(0, 0, 30);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
break;
< /code>
Кроме того, я взял автопогнированный сертификат, созданный с сервера, и я установил его в корне клиента. System.serviceModel.Channels.ServiceChannel,
не может использоваться для общения, потому что оно находится в неисправном состоянии. < /P>
< /blockquote>

Подробнее здесь: https://stackoverflow.com/questions/795 ... redentials
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • VS 2022 Добавить ссылку на службу, не генерирующую ClientCredentials для .Net Framework
    Anonymous » » в форуме C#
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • VS 2022 Добавить ссылку на службу, не генерирующую ClientCredentials для .Net Framework
    Anonymous » » в форуме C#
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Android-приложение для проверки подлинности WCF — базовая веб-служба WCF Maui
    Гость » » в форуме Android
    0 Ответы
    86 Просмотры
    Последнее сообщение Гость
  • Вызов одной службы WCF из другой службы WCF: ошибка конечной точки?
    Anonymous » » в форуме C#
    0 Ответы
    28 Просмотры
    Последнее сообщение Anonymous
  • C# .net 8.0 WCF Client не может вызовать службу WCF. Говорит приложение типа контента/SOAP+XML; charset = utf-8; не подд
    Anonymous » » в форуме C#
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»