这是我第一次尝试自定义错误处理,所以请让我知道我是应该做些不同的事情还是改变我尝试使用它的方式。我想在整个Web服务中应用它。我创建了一个类,用于格式化客户端Web服务中的soap异常(throwClientException)。这似乎工作正常。我一直遇到抛出和捕捉部分处理类的问题。从另一个班级我正在验证员工ID。
如果它返回无效,我使用:
ThrowSoapException tse = new ThrowSoapException();
throw tse.throwClientException(1, "EmployeeIDvalidation");
这似乎有效。我遇到的问题是,当代码到达main方法的catch时,我不确定如何处理它。
我想用: catch(SoapException se) 并停止执行该方法以将生成的soap异常传递给客户端。请让我知道处理我想要做的事情的最佳方法是什么。
public class ThrowSoapException : SoapException
{
// This XML Web service method generates a SOAP Client Fault code
public SoapException throwClientException(int faultCode, string nameOfActor)
{
string errorMessage = FaultCode(faultCode);
string wsNamespace = "";
string errSource = "customSOAPexception";
XmlQualifiedName tmpfaultCode = null;
tmpfaultCode = SoapException.ClientFaultCode;
XmlDocument xmlDoc = new XmlDocument();
XmlNode rootNode = xmlDoc.CreateNode(XmlNodeType.Element, SoapException.DetailElementName.Name, SoapException.DetailElementName.Namespace);
XmlNode errorNode1 = xmlDoc.CreateNode(XmlNodeType.Element, "Errors", wsNamespace);
XmlNode errorNode = xmlDoc.CreateNode(XmlNodeType.Element, "Error", wsNamespace);
errorNode1.AppendChild(errorNode);
XmlNode errNumberNode = xmlDoc.CreateNode(XmlNodeType.Element, "ErrorNumber", wsNamespace);
errNumberNode.InnerText = faultCode.ToString();
XmlNode errMsgeNode = xmlDoc.CreateNode(XmlNodeType.Element, "ErrorMessage", wsNamespace);
errMsgeNode.InnerText = errorMessage;
XmlNode errSourceNode = xmlDoc.CreateNode(XmlNodeType.Element, "ErrorSource", wsNamespace);
errSourceNode.InnerText = errSource;
errorNode.AppendChild(errNumberNode);
errorNode.AppendChild(errMsgeNode);
errorNode.AppendChild(errSourceNode);
rootNode.AppendChild(errorNode1);
//Constructing the exception
SoapException soapEx = new SoapException(errorMessage, tmpfaultCode, nameOfActor, rootNode);
return soapEx;
}
public string FaultCode(int faultCode)
{
switch (faultCode)
{
case 1:
return "Invalid Employee ID";
case 2:
return "blah blah";
default:
return "An error has occured.";
}
}
}
主要方法:
[WebMethod]
public string GetEligibility(int employeeID, . . . .)
{
....
try
{ wsBase.SettingData(employeeID . . . . );}
catch (SoapException se)
{ ?????? }
//...more code
}