Как я могу решить эту ошибку "system.servicemodel.faultexception"

Каждый раз, когда я останавливаю программу и снова запускаю, появляется сообщение об ошибке.

PX.Data.PXException: API Login Limit at PX.Api.ContractBased.Soap.WebApiSoapController.Post(ISoapSystemContract systemContract, XmlReader requestReader, String serviceNamespace, String internalNamespace, MethodInfo method, 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() --- 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.Web.Http.Controllers.ApiControllerActionInvoker.d__0.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.Web.Http.Controllers.ActionFilterResult.d__2.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.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
      {
           ...
      }

что не так с моим кодом и как это исправить?

избавьтесь от оператора soapClient using и посмотрите, поможет ли это - операторы using могут играть в игры с клиентами api ...

Jazb 26.10.2018 04:40

Какая часть выбрасывает исключение? Это на client.Logout() или во время удаления заявления using?

fourwhey 26.10.2018 05:03

@fourwhey в soapClient.Login

Qwerty 26.10.2018 05:25

В чем заключается сообщение Excepiton?

Chetan 26.10.2018 08:28

@ChetanRanpariya посмотрите процитированную часть

Qwerty 26.10.2018 08:35

В какой строке кода возникает исключение?

random 26.10.2018 08:37

@Qwerty, это нет сообщение. Это только часть. Остальное будет содержать то, что на самом деле произошло. Опубликуйте исключение полный, возвращенное Exception.ToString(). Не беспокойтесь о предложении using, это не влияет на что угодно, когда все идет хорошо

Panagiotis Kanavos 26.10.2018 08:38

@Qwerty FaultException означает, что другая услуга вернул сообщение об ошибке. FaultException содержит, объект ошибки и полное сообщение. Если это вызвано Login(), это, вероятно, означает, что логин не удался. Вы не можете ничего "исправить", не зная, в чем была настоящая проблема, поэтому вы имеют, чтобы проверить, что такое свойства исключения и FaultMessage.

Panagiotis Kanavos 26.10.2018 08:41

@johnB using не влияет на работу прокси. Это влияет только на то, как они закрыто. Если все идет нормально, проблем не возникает. Только в случае исключений прокси-сервер требует специальной обработки для закрытия.

Panagiotis Kanavos 26.10.2018 08:43

@PanagiotisKanavos сообщение было слишком длинным, подождите, я отредактирую

Qwerty 26.10.2018 09:15
1
10
522
1

Ответы 1

В нелицензионных демонстрационных версиях доступно ограниченное количество сеансов подключения к API.

Вы должны убедиться, что выход из системы вызывается всегда после входа в систему, иначе у вас закончатся доступные сеансы подключения. Для нелицензионной версии вы должны стремиться к максимум 1 соединению в любое время и убедиться, что приложение не может быть остановлено без выполнения выхода из сеанса соединения API.

Вот стратегия, которую я бы использовал, чтобы убедиться, что:

  • Используйте только однопоточный код для взаимодействия с API, потому что вы хотите избежать множественных одновременных подключений при использовании нелицензионных версия.

  • Оберните весь код, взаимодействующий с API, в блок исключений, который будет всегда вызывайте выход. Здесь не повредит быть параноиком, вы можете поместить код входа в блок try, потому что, если вход не удастся, попытка выхода из системы не повредит.

  • Постарайтесь сделать ваш сеанс коротким и конкретным, не входите в систему предварительно или оставьте соединение открытым дольше, чем требуется. Слишком долгое времяпрепровождение на сессиях увеличивает шансы потеря соединения до того, как вы сможете выполнить команду выхода или просто забыл выйти из системы.

  • Зарегистрируйте обработчик событий OnClose для всего приложения для выхода из системы. сеанс, когда пользователь мягко закрывает приложение. Если пользователь жестко закрывает приложение (например, убивая его с помощью диспетчера задач), вы не можете выполнить выход, поэтому вам придется дождаться истечения срока действия сеанса или перезапустить IIS, чтобы избежать ошибок превышения лимита подключения API.

  • Записывать на диск все попытки входа / выхода из подключения (будь то успешные или нет), чтобы убедиться, что он всегда вызывает выход из системы при каждом входе в систему. Когда выполняется вход в систему, создайте уникальный идентификатор для этого соединения и зарегистрируйте его, при выходе из системы регистрируйте его с тем же уникальным идентификатором. Если вы получите ошибка предела API снова, у вас будут данные журнала, чтобы подтвердить, не вы успешно вышли из всех открытых сессий.

Можете как-нибудь очистить логины? Я работаю против демонстрационной версии для разработки, поэтому можно отказаться от любых логинов.

mxmissile 02.10.2019 20:26

да, откройте командную строку администратора и запустите IISReset или перейдите на страницу Применить обновления и нажмите ПЕРЕЗАПУСК ПРИЛОЖЕНИЯ или откройте inetmgr и перезапустите веб-сайт.

Hugues Beauséjour 03.10.2019 22:31

Другие вопросы по теме