#soap
#soap
Вопрос:
Я использую wsdl с использованием c # и возвращаю следующую ошибку «Заголовок SOAP не был понят».
Что вызывает эту проблему и как мне ее решить?
Спасибо за ваш ответ, согласно вашему предложению, я попробовал этот код :
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class MyHeader : SoapHeader
{
public bool _MustUnderstand;
public MyHeader() { }
public bool MustUnderstand
{
get { return _MustUnderstand; }
set { _MustUnderstand = value; }
}
}
public class Service : System.Web.Services.WebService
{
public MyHeader MustUnderstand;
public Service ()
{
//Uncomment the following line if using designed components
//InitializeComponent();
}
[WebMethod]
[SoapHeader("MustUnderstand")]
public void Nokia()
{
MustUnderstand = new MyHeader();
MustUnderstand.MustUnderstand = true;
WebService connect = new WebService();
long publicKeyK ;
publicKeyK= connect.GetPublicKey(out publicKeyK);
}
}
(Я также поставил false для свойства mustUnderstand …)
Я все еще получаю то же сообщение об ошибке. «Заголовок SOAP не был понят»
Есть идеи? Poli.
Ответ №1:
Каждый раз, когда вы получаете сообщение «Заголовок SOAP X не был понят», это означает, что для свойства mustUnderstand для этого элемента установлено значение true и что приложение-потребитель не «понимает» или не распознает этот элемент. Приложение, которое отправляет сообщение, вероятно, устанавливает свойство mustUnderstand, потому что я думаю, что по умолчанию оно не установлено или false . смотрите http://msdn.microsoft.com/en-us/library/system.servicemodel.messageheaderattribute.aspx
Комментарии:
1. Этот ответ очень помогает mi. Чтобы удалить
MustUnderstand
из ответного сообщения, вы должны написать свое собственноеSoapFilter
и переопределитьSoapFilterResult ProcessMessage(SoapEnvelope envelope)
. Здесь вы можете получить доступ к необработанному xml и удалить любые атрибуты, которые вы хотите. Затем вы создаете свой собственный класс, который является производным отSecurityPolicyAssertion
и использует ваш фильтрSoapFilter CreateClientInputFilter(FilterCreationContext context)
.