如何解决此错误"System.ServiceModel.FaultException"



每次我停止程序并再次运行错误消息pop

PX。数据PXException:API登录限制PX。Api。基于合同。肥皂WebApiSoapController。Post(ISoapSystemContract systemContract,XmlReader requestReader,String serviceNamespace,String internalNamespace,MethodInfo方法,Func1 serviceFactory, IEdmModel edmModel) at PX.Api.ContractBased.Soap.WebApiSoapController.<Login>d__6.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Threading.Tasks.TaskHelpersExtensions.<CastToObject>d__31.MoveNext((---从引发异常的前一位置开始的堆栈结尾跟踪---在系统中。运行时。例外服务。ExceptionDispatchInfo。Throw((在系统中。运行时。编译器服务。任务等待者。HandleNonSuccessAndDebuggerNotification(任务任务(在系统中。网状物Http。控制器。ApiControllerActionInvoker.d_0.MoveNext((---从引发异常的前一位置开始的堆栈结尾跟踪---在系统中。运行时。例外服务。ExceptionDispatchInfo。Throw((在系统中。运行时。编译器服务。任务等待者。HandleNonSuccessAndDebuggerNotification(任务任务(在系统中。网状物Http。控制器。ActionFilterResult.d_2.MoveNext((---从引发异常的前一位置开始的堆栈结尾跟踪---在系统中。运行时。例外服务。ExceptionDispatchInfo。Throw((在系统中。运行时。编译器服务。任务等待者。HandleNonSuccessAndDebuggerNotification(任务任务(在系统中。网状物Http。控制器。异常过滤器结果.d_0.MoveNext((

这是我在中登录的代码

...
using (DefaultSoapClient soapClient = new DefaultSoapClient())
{
//Log in to Acumatica ERP        
soapClient.Login
(
Properties.Settings.Default.UserName,
Properties.Settings.Default.Password,
Properties.Settings.Default.CompanyName,
Properties.Settings.Default.Branch,
null
);
...
try
{
...
soapClient.Logout();
}
catch (Exception e)
{
...
soapClient.Logout();
}
finally
{
...
}

我的代码出了什么问题,我该如何修复?

未经许可的演示版本提供的API连接会话数量有限。

您必须确保登录后始终调用Logout,否则您将耗尽可用的连接会话。对于未经授权的版本,您应该在任何时候实现最多1个连接,并确保在不执行API连接会话注销的情况下无法停止应用程序。

以下是我用来确保的策略:

  • 只使用单线程代码与API交互,因为在使用未经许可的情况下,希望避免多个并发连接版本

  • 将所有与API交互的代码包装在异常块中,该异常块将始终呼叫登出。在这里偏执是没有坏处的,你可以将登录代码放在try块中,因为如果登录失败,尝试注销也没有坏处。

  • 尽量缩短你的会话时间,切中要害,不要登录先发制人或保持连接打开的时间超过要求。会议持续时间过长会增加在发出注销命令或只是忘记注销。

  • 注册应用程序范围的OnClose事件处理程序以注销会话。如果用户硬关闭应用程序(例如:通过使用任务管理器杀死它(,则无法执行注销,因此您必须等待会话到期或重新启动IIS,以避免出现API连接限制超出错误。

  • 将每次连接登录/注销尝试记录到磁盘(是否成功是否(,以确保每次登录都会调用logout。什么时候执行login,为该连接创建一个唯一的id并记录它,当执行登出时,用相同的唯一id记录它如果API限制再次出现错误,您将有日志数据来确认并非您已成功注销所有打开的会话。

相关内容

最新更新