延续我的传奇 Web服务接口项目,我现在正试图找到处理客户端错误的最佳方法。我认为我已经差不多完成了研究阶段,并且所说明的代码都可以按我的预期工作,但是在继续进行开发阶段之前,我想检查一下这是否是到目前为止处理这种情况的最佳方法。
想象一下这种情况:使用 MANASYS爵士乐 我已经使用程序JSPG2创建了一个名为MyJSv的CICS(=大型机)REST Web服务。这遵循Swagger标准,可以轻松使用SOAPUI,Postman或其他测试实用程序进行调用,但是由于各种原因,JSON模式缺乏对该接口的完整描述。例如,在架构函数中,函数是任意长度的字符串,实际上它必须具有以下值之一"E", "U", "A", or "D" meaning "Enquiry", "Update"等等,而EMPNO是任何文本输入,但实际上必须是1到999999范围内的整数。现在您想在程序中使用此服务,该程序可能是网页,Windows窗体,移动应用程序,..用C#,VB或其他任何语言编写。为了方便您,我提供了一个界面,该界面尽可能地向您隐藏JSPG2的复杂性,并构建了该界面的完整规则。就像一个简单的对话框创建了Web服务程序MyJsv / JSPG2一样,只需点击几下 MANASYS爵士乐 对话框已经为您的项目中的JSPG2创建了一个接口,在该项目中创建了一个文件夹MyJSV,其中包含与服务MyJSv和操作JSPG2有关的各种对象。
到目前为止,这是研究项目WindowsApp的结构。想象一下,文件夹MyJSv中的所有内容都是由MANASYS Jazz生成的,而您已经编写了其余的内容(Form1)。我希望在R之后&D MyJSv将是您解决方案中的一个单独项目,而不是同一项目中的文件夹,从而使您的部分可以用C#以外的语言编写,并且MyJSv项目可以在多种不同的解决方案中使用。
WindowsApp的格式为Form1.cs,带有一个用于输入EMPNO值的文本框,一个用于显示消息的标签以及一个名为btnEnquiry的按钮,其代码如下:-
使用有效的EMPNO值,此方法有效,并且您会看到消息"响应在ojspg2中"(调试确认)。当您输入"xxx"进入txtEmpno.text,检测到错误并显示消息"Jazz Data Error,EMPNO:值不是数字" displayed.
JazzDataExceptions是从JSPG2Client.cs中的以下代码产生的:-
到现在为止还挺好。但是,如果在输入EMPNO值时报告了错误,则UI会更好,以便您在txtEmpno事件处理程序中重复try / catch代码:-
现在,最容易纠正的错误将被捕获。
The research project WindowsApp has dealt with a single function (Enquiry) with only a couple of fields, each with simple validation requirements. In the production situation the interface might deal with a few dozen input and output fields, some of which may have complex validation requirements like check digits and pattern validation. There may be several different types of function (Enquiry, 更新资料, Add, Delete, New Order, Process Order ...). There are rules about when functions are valid, for example an 更新资料 must follow an enquiry. There may be conversational requirements: authentication is the obvious one, but there might be requirements about a conversation sequence. WIth this in mind: -
问题。
想象一下这种情况:使用 MANASYS爵士乐 我已经使用程序JSPG2创建了一个名为MyJSv的CICS(=大型机)REST Web服务。这遵循Swagger标准,可以轻松使用SOAPUI,Postman或其他测试实用程序进行调用,但是由于各种原因,JSON模式缺乏对该接口的完整描述。例如,在架构函数中,函数是任意长度的字符串,实际上它必须具有以下值之一"E", "U", "A", or "D" meaning "Enquiry", "Update"等等,而EMPNO是任何文本输入,但实际上必须是1到999999范围内的整数。现在您想在程序中使用此服务,该程序可能是网页,Windows窗体,移动应用程序,..用C#,VB或其他任何语言编写。为了方便您,我提供了一个界面,该界面尽可能地向您隐藏JSPG2的复杂性,并构建了该界面的完整规则。就像一个简单的对话框创建了Web服务程序MyJsv / JSPG2一样,只需点击几下 MANASYS爵士乐 对话框已经为您的项目中的JSPG2创建了一个接口,在该项目中创建了一个文件夹MyJSV,其中包含与服务MyJSv和操作JSPG2有关的各种对象。
到目前为止,这是研究项目WindowsApp的结构。想象一下,文件夹MyJSv中的所有内容都是由MANASYS Jazz生成的,而您已经编写了其余的内容(Form1)。我希望在R之后&D MyJSv将是您解决方案中的一个单独项目,而不是同一项目中的文件夹,从而使您的部分可以用C#以外的语言编写,并且MyJSv项目可以在多种不同的解决方案中使用。
WindowsApp的格式为Form1.cs,带有一个用于输入EMPNO值的文本框,一个用于显示消息的标签以及一个名为btnEnquiry的按钮,其代码如下:-
C#:
private void btnEnquire_Click(object sender, EventArgs e)
{
try
{
jspg2Client.Function = "E";
jspg2Client.EMPNO = txtEmpno.Text;
ojspg2 = jspg2Client.Post();
lblMessage.Text = "响应在ojspg2中";
}
catch (MyJSv.JazzDataException ex)
{
lblMessage.Text = "Jazz Data Error, " + ex.FieldName + ":" + ex.Message;
}
}
JazzDataExceptions是从JSPG2Client.cs中的以下代码产生的:-
C#:
public class JSPG2Client
{
...
// Web Service Input Properties - Visible request message
...
private string _EMPNO = null;
public string EMPNO // => RequestJSPG2.JZ_Employee.EMPNO
{
get => _EMPNO;
set
{
_EMPNO = null;
_EMPNO = IsInt(value, 0, 999999, "EMPNO");
ijspg2.JSPG2.IJSPG2.JZ_Employee.EMPNO = _EMPNO;
}
}
// Functions used to check input properties
...
private string IsInt(string Value, int MinVal, int maxval, string FieldName)
{
int IX = 0;
if (!int.TryParse(Value, out IX))
{
throw new JazzDataException("Value is Not Numeric", FieldName);
}
if (IX < MinVal || IX > maxval)
{
throw new JazzDataException("Value out of range", FieldName);
}
return Value;
}
C#:
private void txtEmpno_TextChanged(object sender, EventArgs e)
{
lblMessage.Text = "";
try
{
jspg2Client.EMPNO = txtEmpno.Text;
}
catch (MyJSv.JazzDataException ex)
{
lblMessage.Text = "Jazz Data Error, " + ex.FieldName + ":" + ex.Message;
}
}
The research project WindowsApp has dealt with a single function (Enquiry) with only a couple of fields, each with simple validation requirements. In the production situation the interface might deal with a few dozen input and output fields, some of which may have complex validation requirements like check digits and pattern validation. There may be several different types of function (Enquiry, 更新资料, Add, Delete, New Order, Process Order ...). There are rules about when functions are valid, for example an 更新资料 must follow an enquiry. There may be conversational requirements: authentication is the obvious one, but there might be requirements about a conversation sequence. WIth this in mind: -
问题。
- 我想在MyJSv中生成最佳代码。上面的验证代码可以改进吗?
- 您已经发现MyJSv / JSPG2。您想如何使用它?您需要知道什么是函数,有关任何序列要求的规则以及它们的输入和输出消息中的字段的规则?作为MANASYS Jazz的开发人员,为功能提供帮助没有问题"生成Web服务界面",但我必须考虑需要为此功能的用户提供的工具,该工具生成MyJSv / JSPG2及其接口,并提供Web服务使用者YOU所需的文档。从理论上讲,MyJSv / JSPG2的开发人员是为大型机用户(银行等)工作的人。我希望该开发人员能够以您想要的形式提供帮助,也许是JSPG2Client的帮助功能以及其每个属性和方法,而不仅仅是您必须查找的网页。
- 当前输出数据返回
C#:
ojspg2 = jspg2Client.Post();