1

We have a Windows Service written in .NET that we use to "sync" data into SharePoint Online. What the service does is to update items in a particular SharePoint list every 30 minutes (configurable, but doesn't seem to be related to the problem.)

After the service has been running for a while without issue, sometimes 2 weeks, sometimes more, it fails to connect to SPO and from then on will fail every time it runs with the same error (the IP address of the SPO URL may change in the error but everything else is the same.)

When someone notices that the data in the list is stale, we restart the service and it works perfectly. Obviously we can institute workarounds such as emailing a server admin when we run into this error, or have a watchdog restart our service, but we would really prefer to fix the root cause.

The exception that we get is:

14/09/2017 00:00:06.61  Error      SharePoint Online           Validation            (STGMModelStatusSettings) An error occurred accessing SharePoint Online and/or associated services. Exception: System.Net.WebException: Unable to connect to the remote server ---> System.Net.Sockets.SocketException: No connection could be made because the target machine actively refused it 104.211.48.16:443 
at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
   at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Exception& exception)
   --- End of inner exception stack trace ---
   at System.Net.HttpWebRequest.GetRequestStream(TransportContext& context)
   at System.Net.HttpWebRequest.GetRequestStream()
   at Microsoft.SharePoint.Client.Idcrl.IdcrlAuth.DoPost(String url, String contentType, String body, Func`2 webExceptionHandler)
  at Microsoft.SharePoint.Client.Idcrl.IdcrlAuth.GetUserRealm(String login)
   at Microsoft.SharePoint.Client.Idcrl.IdcrlAuth.GetServiceToken(String username, String password, String serviceTarget, String servicePolicy)
   at Microsoft.SharePoint.Client.Idcrl.SharePointOnlineAuthenticationProvider.GetAuthenticationCookie(Uri url, String username, SecureString password, Boolean alwaysThrowOnFailure)
   at Microsoft.SharePoint.Client.SharePointOnlineCredentials.GetAuthenticationCookie(Uri url, Boolean refresh, Boolean alwaysThrowOnFailure)
   at Microsoft.SharePoint.Client.ClientRuntimeContext.SetupRequestCredential(ClientRuntimeContext context, HttpWebRequest request)
   at Microsoft.SharePoint.Client.SPWebRequestExecutor.GetRequestStream()
   at Microsoft.SharePoint.Client.ClientContext.GetFormDigestInfoPrivate()
   at Microsoft.SharePoint.Client.ClientContext.EnsureFormDigest()
   at Microsoft.SharePoint.Client.ClientContext.ExecuteQuery()
   at WorkbenchService.SharePointOnline.SPODataSync.ValidateConfigurationForSTGMTasks(ClientContext& clientContext, Web& web, List& list) in C:\redacted\SPODataSync.cs:line 133

Line 133 of the service is as follows: enter image description here

My first thought was some kind of leak but the clientContext is disposed correctly even on exception and is newed up every time so I'm not sure that can be it.

3
  • I am facing the similar issue, Service not able to connect to SharePoint online after a random time. some time a day , some time three or four days.after restart of app pool it works as expected. May 2, 2018 at 9:04
  • coxy, did you find any solution for this issue May 2, 2018 at 10:10
  • @vinitkumar nope, we never fixed it. The workaround we implemented was to start a new AppDomain every time that does the actual connection to SharePoint. Even that fails sometimes but when it fails the next attempt is in a fresh AppDomain and succeeds.
    – Coxy
    May 2, 2018 at 12:33

2 Answers 2

1

I have fixed this issue for all time. not sure if it help for others too. In My case i added a proxy into the web config of the Asp.net service which was calling the SharePoint online to download the documents from the Library.

> <system.net>
>     <defaultProxy useDefaultCredentials="true">
>       <proxy proxyaddress="proxyAddress" usesystemdefault="True"/>
>     </defaultProxy>   </system.net>

After providing the proxy id we never did restart of App pool and works perfect.

Hope helps somebody.

1

I was having the same issue for a week or so. This is to deal with SSL/TLS for sure.

What you can do is

  1. Add System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12; to your code. This will allow the TLS 2.0 connection. Now try, if it doesn't work
  2. open regedit. go to HKEY_LOCAL_MACHINE -> System -> CurrentControlSet -> Control -> SecurityProviders -> SCHANNEL -> Protocols
  3. Then create TLS 1.2 AND then create two more client & server folder.
  4. Add two reg-DWORD as disabledByDefault & enable. Make enable 1 & disable default 0.
  5. It should be the same in both client & server folder

That should work ! enter image description here

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.