Uri uri = new Uri("http://localhost:8008/SchoolOnlineService)");
mServiceHost = new ServiceHost(typeof(SchoolOnline), uri);
WSHttpBinding binding = new WSHttpBinding(SecurityMode.None);
binding.Security.Message.ClientCredentialType = MessageCredentialType.UserName;
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
mServiceHost.AddServiceEndpoint(typeof(ISchoolOnline), binding, uri);
mServiceHost.Credentials.UserNameAuthentication.UserNamePasswordValidationMode = UserNamePasswordValidationMode.Custom;
mServiceHost.Credentials.UserNameAuthentication.CustomUserNamePasswordValidator = new SmsDatebookInfo.SchoolOnlineService.SchoolOnlineServiceUserNamePasswordValidator();
mServiceHost.Authorization.PrincipalPermissionMode = PrincipalPermissionMode.Custom;
mServiceHost.Authorization.ExternalAuthorizationPolicies = new ReadOnlyCollection<IAuthorizationPolicy>(new List<IAuthorizationPolicy> { new SchoolOnlineAuthorizationPolicy() });
ServiceMetadataBehavior serviceMetadataBehaviour = new ServiceMetadataBehavior();
serviceMetadataBehaviour.HttpGetEnabled = true;
mServiceHost.Description.Behaviors.Add(serviceMetadataBehaviour);
mServiceHost.Open();
Сессии в WCF сервисах
пытаюсь создать WCF сервис c привязкой wsHttpBinding и поддержкой сессий и получаю следующее исключение: Контракту требуется свойство Session, однако привязка "WSHttpBinding" его не поддерживает или этого не позволяет неправильная настройка.
Кто нибудь знает это wsHttpBinding сессии действительно не поддерживает или
я привязку не правильно конфигурирую?
Если поддерживает, то подскажите где моя ошибка в конфигурировании привязки?
вот код:
Код:
В SessionMode соответственно ставлю значение Required:
Код:
[ServiceContract(Namespace = "http://localhost/SmsDatebookInfo.SchoolOnlineService", SessionMode = SessionMode.Required)]
public interface ISchoolOnline
{
...
}
public interface ISchoolOnline
{
...
}
И значение InstanceContextMode Per-Session:
Код:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession, ConcurrencyMode = ConcurrencyMode.Single)]
public class SchoolOnline : ISchoolOnline
{
...
}
public class SchoolOnline : ISchoolOnline
{
...
}
Т.е. как создать сервис с привязкой, чтобы тип аутентификации был по имени пользователя и паролю, без шифрования и сертификатов (они мне не нужны) и чтобы сессии подерживались?