1

这是我第一次尝试自定义错误处理,所以请让我知道我是否应该做一些不同的事情或改变我尝试过的方式。我想在整个网络服务中应用它。我创建了一个类,用于在我的 Web 服务中为客户端 (throwClientException) 格式化肥皂异常。这似乎工作正常。我一直在处理类的 throw 和 catch 部分时遇到问题。从另一个班级,我正在验证员工 ID。

如果它返回无效,我使用:

ThrowSoapException tse = new ThrowSoapException();

throw tse.throwClientException(1, "EmployeeIDvalidation");

这似乎有效。我遇到的问题是当代码到达 main 方法的捕获时我不确定如何处理它。

我想使用: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
}
4

0 回答 0