В моем веб-сервисе 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>
Спасибо, Радек