每次我停止程序并再次运行时都会弹出错误消息
PX.Data.PXException:API登录限制 在PX.Api.ContractBased.Soap.WebApiSoapController.Post(ISoapSystemContract systemContract,XmlReader requestReader,字符串serviceNamespace,字符串internalNamespace,MethodInfo方法,Func
1 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__3
1.MoveNext() ---从之前引发异常的位置开始的堆栈结束跟踪--- 在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) 在System.Web.Http.Controllers.ApiControllerActionInvoker.d__0.MoveNext() ---从之前引发异常的位置开始的堆栈结束跟踪--- 在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) 在System.Web.Http.Controllers.ActionFilterResult.d__2.MoveNext() ---从之前引发异常的位置开始的堆栈结束跟踪--- 在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) 在System.Web.Http.Controllers.ExceptionFilterResult.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
{
...
}
我的代码有什么问题以及如何解决?
答案 0 :(得分:1)
未经许可的演示版本具有数量有限的API连接会话。
您必须确保在登录后总是 调用注销,否则您将耗尽可用的连接会话。对于非许可版本,您应该随时争取最多1个连接,并确保不执行API连接会话注销就无法停止应用程序。
这是我用来确保的策略:
仅使用单线程代码与API交互,因为您 要避免在使用未许可的情况下避免多个并发连接 版本。
将所有与API交互的代码包装在异常块中,该代码将 始终调用注销。在这里被偏执并没有什么害处,您可以将登录代码放到try块中,因为如果登录失败,则尝试注销没有任何危害。
请尽量缩短会话时间,切记,请勿登录 抢先或保持连接打开的时间超出要求。 会话闲逛时间过长会增加 在发出注销命令之前断开连接,或者 只是忘记注销。
注册一个应用程序范围的OnClose事件处理程序以注销该 用户软关闭应用程序时的会话。如果用户硬关闭应用程序(例如:通过使用任务管理器将其杀死),则无法执行注销,因此必须等待会话到期或重新启动IIS,以避免超出API连接限制错误。
将每个连接登录/注销尝试记录到磁盘(是否成功) (或否),以确保每次登录时始终调用注销。什么时候 执行登录后,为该连接创建一个唯一的ID并进行记录, 执行注销时,使用相同的唯一ID对其进行记录。如果你得到 再次出现API限制错误,您将获得日志数据以确认是否 不是您已成功注销所有打开的会话。