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