2016-07-15 5 views
1

У меня есть веб-служба C# ASMX (унаследованный проект, не может быть помог). Один из запросов, который он должен получить, поставляется с динамическим HTTP-заголовком «TransactionID», и он должен быть возвращен в HTTP-заголовке в ответе.SOAP Exception Удаляет пользовательские заголовки HTTP

При возврате объектов сообщения об успешном выполнении это прекрасно работает, однако при возврате сообщений SOAPFault все пользовательские заголовки HTTP уничтожаются, и я не могу найти способ их восстановления. Клиент настаивает на том, что он должен быть отправлен для сообщений об отказах. Я попытался использовать SOAPExtension, но у него нет видимости заголовков HTTP. Я пробовал разместить

HttpContext.Current.Response.AddHeader("TransactionID", TransactionId); 

в разных местах, но безрезультатно.

код ниже:

[WebMethod(MessageName = "name")] 
[SoapHeader("Header")] 
[SoapMessageLoggingExtension] 
[SoapDocumentMethod("http://www.contoso.com/DocumentLiteral", RequestElementName = "requestName", ResponseElementName = "responseName")] 
[return: System.Xml.Serialization.XmlElementAttribute("ReturnType")] 
public ResponseType WebMethodName(object RequestObject) 
{ 
    bool success = true; 
    int errorType = 0; 
    string errorMsg = String.Empty; 
    string TransactionId = String.Empty; 
    SoapException soapEx = null; 

    try 
    { 
     TransactionId = HttpContext.Current.Request.Headers["TransactionID"].ToString(); 

     //Determine success or throw appropriate exception 
    } 
    catch //example exception 
    { 
     success = false; 
     ErrorType = 1; 
     errorMsg = "ErrorText"; 
     soapEx = new SoapException(_errorType.ToString() + " : " + errorMsg, SoapException.ServerFaultCode); 
    } 
    finally 
    { 
     HttpContext.Current.Response.AddHeader("TransactionID", TransactionId); 
     if (success) 
     { 
      resp = new SuccessResponse(); 
     } 
    } 

    if (soapEx != null) throw soapEx; 
    return resp; 
} 

Я в недоумении ... это ожидаемое поведение? Если это так, есть ли способ обойти это? Или я просто плотный?

Пожалуйста, дайте мне знать, если я пропустил какую-либо важную информацию, спасибо.

ответ

0

Для тех, кто сталкивается с этой проблемой в будущем, я в конечном итоге взломал свой путь вокруг (с некоторой помощью от коллеги, кредит там, где это необходимо).

Я добавил заголовок в тело ответа, затем выполнил поиск этого содержимого в SoapMessageLoggingExtension после отправки ответа, добавил HTTP-заголовок из него и удалил его из тела. Беспокойный, но эффективный.

Для записи я все еще рассматриваю эту ошибку в структуре, если кто-то не может объяснить, почему это не так.