Вопрос

SOAP Header

Добрый день.

Для реализации WS воспользовался статьей https://community.terrasoft.ru/questions/polucit-wsdl-konfiguracionnogo-web-servisa

Но там ничего не сказано про заголовок bpmcsrf. 

Есть простой пример как передать soap header, что настроить?

Нравится

5 комментариев

Информация по настройке системы для  защиты от CSRF-атак есть тут.

Как передавать soap header, обсуждалось тут и тут.

Зверев Александр пишет:

Информация по настройке системы для  защиты от CSRF-атак есть тут.

Как передавать soap header, обсуждалось тут и тут.

Мой 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-атак для одного полностью или его отдельных методов.

Показать все комментарии