Добрый день.
Для реализации WS воспользовался статьей https://community.terrasoft.ru/questions/polucit-wsdl-konfiguracionnogo-web-servisa
Но там ничего не сказано про заголовок bpmcsrf.
Есть простой пример как передать soap header, что настроить?
Нравится
Информация по настройке системы для защиты от CSRF-атак есть тут.
Зверев Александр пишет:
Информация по настройке системы для защиты от CSRF-атак есть тут.
Мой soap сервис доступен только после авторизации(authservice), поэтому я сгенерил wsdl локально в сборку dll, чтобы можно было вызывать через конс. приложение и не использую как Service Reference.
Но у меня не получается создать экз. класса var postRequest1 = new ICLIntegrationAISPTPPServiceClient();
Доступен только ICLIntegrationAISPTPPService.
1) Почему?
2) Что указывать в namespace ? сейчас указал как в примере.
Код класса заголовка ниже.
namespace ICLIntegrationAISPTPPService
{
    using System.ServiceModel.Channels;
    using System.Xml;
    using System.Xml.Serialization;
    public class MyHeader : MessageHeader
    {
        private readonly UsernameToken _usernameToken;
        public MyHeader(string csrfToken)
        {
            _usernameToken = new UsernameToken(string.Empty, csrfToken);
        }
        public MyHeader(string id, string csrfToken)
        {
            _usernameToken = new UsernameToken(id, csrfToken);
        }
        public override string Name
        {
            get { return "BPMCSRF"; }
        }
        public override string Namespace
        {
            get { return "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-sece…"; }
        }
        protected override void OnWriteHeaderContents(XmlDictionaryWriter writer, MessageVersion messageVersion)
        {
            XmlSerializer serializer = new XmlSerializer(typeof(UsernameToken));
            serializer.Serialize(writer, _usernameToken);
        }
    }
    [XmlRoot(Namespace = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-sece…")]
    public class UsernameToken
    {
        public UsernameToken()
        {
        }
        public UsernameToken(string id, string csrfToken)
        {
            Id = id;
            CsrfToken = csrfToken;
        }
        [XmlAttribute(Namespace = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-util…")]
        public string Id { get; set; }
        [XmlElement]
        public string CsrfToken { get; set; }
    }
} 
Также Прикладываю код интерфейса.
using System.Collections.Generic;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Web.Services.Protocols;
namespace ICLIntegrationAISPTPPService
{
    [ServiceContract]
    public interface IService
    {
        [OperationContract]
        GetNewTCRequestListResponse GetNewTCRequestList();
}}
[DataContract]
    public class GetNewTCRequestListResponse
    {
private List<string> id = new List<string>();
        [DataMember]
        public List<string> result
        {
            get { return id; }
            set { id = value; }
        }
    }
В академии есть готовые примеры клиентских C#-программ, работающих с веб-сервисом.
Зверев Александр,
Мне надо использовать именно soap, т.к. там сложные условия выборки и конвертации.
https://community.terrasoft.ru/questions/polucit-wsdl-konfiguracionnogo…;
я хотел использовать данный пример из статьи, но не получается header передать. Мои сервисы почти готовы, т.к. нет смысла переходить на Odata.
Как хотите. В примере настройки есть строки, как отключить защиту от CSRF-атак для одного полностью или его отдельных методов.
