gautamsi / ews-javascript-api

EWS API for TypeScript/JavaScript - ported from OfficeDev/ews-managed-api - node, cordova, meteor, Ionic, Electron, Outlook Add-Ins
MIT License
281 stars 72 forks source link

Too many concurrent connections opened., Cannot open mailbox.. #357

Closed bladerunner2020 closed 4 years ago

bladerunner2020 commented 4 years ago

Encountered error " Too many concurrent connections opened., Cannot open mailbox...", when I tried to read meeting room calendars. I use the raw FindItems request:


 folders = calendarIds.map((id) => new FolderId(WellKnownFolderName.Calendar, new Mailbox(id)));
exch.FindItems(folders, null, null, cv, null, null);
```.

Found out that it returns data for first 16 calendars only. For 17+ response has an error 127 (too many concurrent connections).

Any idea, why is it?
kstankov commented 4 years ago

Check the throtelling policy for EWS. Exchange has limit for how many requests you may issue per second.

⁣Best regards, Kiril Stankov.​

On 14 Jun 2020, 21:03, at 21:03, Alexander Pivovarov notifications@github.com wrote:

Encountered error " Too many concurrent connections opened., Cannot open mailbox...", when I tried to read meeting room calendars. I use the raw FindItems request:


folders = calendarIds.map((id) => new
FolderId(WellKnownFolderName.Calendar, new Mailbox(id)));
exch.FindItems(folders, null, null, cv, null, null);
```.

Found out that it returns data for first 16 calendars only. For 17+
response has an error 127 (too many concurrent connections).

Any idea, why is it?

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/gautamsi/ews-javascript-api/issues/357
bladerunner2020 commented 4 years ago

Check the throtelling policy for EWS. Exchange has limit for how many requests you may issue per second. ⁣Best regards, Kiril Stankov.​

@kstankov, thanks. I thought that if I put all mailboxes in the same request it would be done as one request... Seems that was a wrong assumption...

PS Just divided the request into few - each 16 mailboxes. It works.

kstankov commented 4 years ago

Nice.

⁣Best regards, Kiril Stankov.​

On 14 Jun 2020, 22:47, at 22:47, Alexander Pivovarov notifications@github.com wrote:

Check the throtelling policy for EWS. Exchange has limit for how many requests you may issue per second. ⁣Best regards, Kiril Stankov.​

@kstankov, thanks. I thought that if I put all mailboxes in the same request it would be done as one request... Seems that was a wrong assumption...

PS Just divided the request into few - each 16 mailboxes. It works.

-- You are receiving this because you were mentioned. Reply to this email directly or view it on GitHub: https://github.com/gautamsi/ews-javascript-api/issues/357#issuecomment-643813347

gautamsi commented 4 years ago

few things to note.

  1. You are using internal method (no public overload uses array of folders), although it works as that is the one used internally
  2. Exchange would consider each mailbox as 1 connection, so you pretty soon reach limit of the connection.
  3. if you split the request and wait for the first request before sending another, it works.
  4. To be able to process 100s of mailboxes, you want to use impersonation. with impersonation the number of connection is still 1 (from app side) per mailbox and they are also counted towards that impersonated mailbox rather than the calling credential.
kstankov commented 4 years ago

But 4. requires some settings on the exchange server side, like setting impersonation account and giving permissions, which is not always available.

⁣Best regards, Kiril Stankov.​

On 15 Jun 2020, 06:58, at 06:58, Gautam Singh notifications@github.com wrote:

few things to note.

  1. You are using internal method (no public overload uses array of folders), although it works as that is the one used internally
  2. Exchange would consider each mailbox as 1 connection, so you pretty soon reach limit of the connection.
  3. if you split the request and wait for the first request before sending another, it works.
  4. To be able to process 100s of mailboxes, you want to use impersonation. with impersonation the number of connection is still 1 (from app side) per mailbox and they are also counted towards that impersonated mailbox rather than the calling credential.

-- You are receiving this because you were mentioned. Reply to this email directly or view it on GitHub: https://github.com/gautamsi/ews-javascript-api/issues/357#issuecomment-643888920

gautamsi commented 4 years ago

well that is what Microsoft recommends. you need to work with Exchange admins to get credentials or run unoptimised calls to EWS.