Использование wsdl с использованием c #, но получение ошибки: «Заголовок SOAP не был понят»

#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) .