Throw SoapException не включает XmlNode в содержимое ответа - PullRequest
0 голосов
/ 15 января 2019

В моем веб-сервисе ASP.NET я выкидываю SoapException с предоставленным XmlNode Проблема заключается в том, что браузер отправляет только информацию стека вызовов (из customErrors выключены или просто «Произошла ошибка», когда они включены).

Моя проблема похожа на описанную здесь: Создание исключения SoapException не возвращает действительный ответ SOAP Однако решение, приведенное в ссылке Throwing SoapException в веб-службе .Net , не решает проблему.

Сервис asmx выглядит так:

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
public class AccountInfoService : System.Web.Services.WebService, IAccountInfoServicesSoap
{
    public void SomeCall(string someParam)
    {
        ThrowSoapError(errorOverride.ErrorCode, errorOverride.ErrorMessage);
    }

    private void ThrowSoapError(int errorCode, string errorMessage)
    {
        if (string.IsNullOrWhiteSpace(errorMessage))
            errorMessage = "Error " + errorCode;

        log.InfoFormat(errorMessage);

        var doc = new XmlDocument();
        var node = doc.CreateNode(XmlNodeType.Element, SoapException.DetailElementName.Name, SoapException.DetailElementName.Namespace);

        var details = doc.CreateNode(XmlNodeType.Element, "Error", "http://tempuri.org/");

        var errorNumber = doc.CreateNode(XmlNodeType.Element, "ErrorNumber", "http://tempuri.org/");
        details.AppendChild(errorNumber);

        var errorNumberChild = doc.CreateNode(XmlNodeType.Text, "ErrorNumber", "http://tempuri.org/");
        errorNumberChild.Value = errorCode.ToString();
        errorNumber.AppendChild(errorNumberChild);

        var errorMessageNode = doc.CreateNode(XmlNodeType.Element, "ErrorMessage", "http://tempuri.org/");
        details.AppendChild(errorMessageNode);

        var errorMessageChild = doc.CreateNode(XmlNodeType.Text, "ErrorMessage", "http://tempuri.org/");
        errorMessageChild.Value = errorMessage;
        errorMessageNode.AppendChild(errorMessageChild);

        node.AppendChild(details);

        throw new SoapException("Fault occurred", SoapException.ServerFaultCode, "url", node);
    }
}

Есть идеи, почему часть Xml не отправляется службой? Web.config очень прост и выглядит так:

<?xml version="1.0"?>
<configuration>
  <appSettings>

    <!-- All calls will return this code if set -->
    <add key="error_override_code" value="2100"/>
    <!-- An optional error message if the above value is present -->
    <add key="error_override_message" value="Payment rejected"/>

  </appSettings>
  <connectionStrings/>
    <system.web>
        <compilation debug="true" targetFramework="4.0"/>
        <customErrors mode="Off"/>
    </system.web>
</configuration>    

Спасибо, Радек

...