SoapException im .Net-Webdienst auslösen
EDIT: Ich habe hoch und niedrig nach einer Antwort darauf gesucht und niemand scheint ein ähnliches Problem zu bekommen. Es scheint mir, dass das WerfenSoapException
sollte die Antwort nach Bedarf formatieren, nicht nur mit der Ausnahmemeldung. Jede Hilfe dankbar erhalten.
Ich versuche, a zurückzugebenSoapException
das sollte ungefähr so aussehen (Beispiel):
HTTP/1.1 500 Internal Server Error.
Date: Wed, 26 May 2004 05:12:08 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 1.1.4322
Cache-Control: private
Content-Type: text/xml; charset=utf-8
Content-Length: 488
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>BlahBlahBlahBlahBlah</faultstring>
<detail />
</soap:Fault>
</soap:Body>
</soap:Envelope>
Dafür habe ich Code wie diesen implementiert, der von der MSDN-Site für stammtSoapException
:
Imports System
Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.ComponentModel
Imports System.Xml.Serialization
Imports System.Xml
<System.Web.Services.WebService(Namespace:="http://tempuri.org/")> _
<System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<ToolboxItem(False)> _
Public Class Service1
Inherits System.Web.Services.WebService
<WebMethod()>
Public Sub Process()
' Build the detail element of the SOAP fault.
Dim doc As New System.Xml.XmlDocument()
Dim node As System.Xml.XmlNode = doc.CreateNode(XmlNodeType.Element, _
SoapException.DetailElementName.Name, _
SoapException.DetailElementName.Namespace)
' Build specific details for the SoapException.
' Add first child of detail XML element.
Dim details As System.Xml.XmlNode = doc.CreateNode(XmlNodeType.Element, _
"mySpecialInfo1", "http://tempuri.org/")
' Add second child of detail XML element with an attribute.
Dim details2 As System.Xml.XmlNode = doc.CreateNode(XmlNodeType.Element, _
"mySpecialInfo2", "http://tempuri.org/")
Dim attr As XmlAttribute = doc.CreateAttribute("t", "attrName", _
"http://tempuri.org/")
attr.Value = "attrValue"
details2.Attributes.Append(attr)
' Append the two child elements to the detail node.
node.AppendChild(details)
node.AppendChild(details2)
'Throw the exception
Dim se As New SoapException("Fault occurred", SoapException.ClientFaultCode, _
Context.Request.Url.AbsoluteUri, node)
Throw se
Return
End Sub
End Class
Wenn ich dies jedoch ausführe, lautet die tatsächlich gesendete Antwort:
HTTP/1.1 500 Internal Server Error
Server: ASP.NET Development Server/10.0.0.0
Date: Wed, 03 Jul 2013 13:06:26 GMT
X-AspNet-Version: 2.0.50727
Cache-Control: private
Content-Type: text/plain; charset=utf-8
Content-Length: 233
Connection: Close
System.Web.Services.Protocols.SoapException: Fault occurred
at MyService.Service1.Process() in C:\MyLocation\MyService\Service1.asmx.vb:line 42
Wie bekomme ich die Antwort wie folgt formatiert:
<soap:Envelope>
<soap:Body>
<soap:Fault>
<faultcode/>
<faultstring/>
<detail/>
</soap:Fault>
</soap:Body>
</soap:Envelope>