これは、カスタム エラー処理の最初の試みです。別のことを行う必要があるか、またはこれを使用しようとした方法を変更する必要があるかどうかを教えてください。これをWebサービス全体に適用したいと思います。クライアント (throwClientException) の Web サービス内で SOAP 例外をフォーマットするクラスを作成しました。これはうまく機能しているようです。クラスの処理のスローとキャッチの部分に問題がありました。別のクラスから、従業員 ID を検証しています。
無効に戻った場合は、次を使用します。
ThrowSoapException tse = new ThrowSoapException();
throw tse.throwClientException(1, "EmployeeIDvalidation");
これはうまくいくようです。私が直面している問題は、コードがメイン メソッドのキャッチに到達したときの処理方法がわからないことです。
私は次を使用したいと思います: 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
}