У меня есть веб-служба 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;
}
Я в недоумении ... это ожидаемое поведение? Если это так, есть ли способ обойти это? Или я просто плотный?
Пожалуйста, дайте мне знать, если я пропустил какую-либо важную информацию, спасибо.