0
Fixed

Remove Connection Checks For Start-Up of Identity Broker

Richard Courtenay 7 years ago in UNIFYBroker/Microsoft SharePoint • updated by anonymous 3 years ago 6

Currently the SharePoint Broker causes the startup of Identity Broker to fail if a connection can not be established to sharepoint (see error below).

This is not ideal behaviour as it places a dependency of Identity Broker on the SharePoint server being available. Realistically, even if SharePoint is not available, other systems may be and the inability to connect to SharePoint should not prevent data synchronization between HR, SQL or any other systems.

The issue is documented already, but I think if possible we should at least allow Identity Broker to start, as we do with other systems. https://unifysolutions.jira.com/wiki/display/IDBSP305/Identity+Broker+Service+fails+to+start+or+a+full+import+fails+due+to+a+permissions+error

The current work around is to remove/comment out the connector and any adapters completely.

Service cannot be started. Unify.Framework.UnifyServerInitializeException: Could not connect to http://sharepoint/_vti_bin/unify/userprofile.svc. TCP error code 10060: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 192.168.0.133:80.  ---> System.ServiceModel.EndpointNotFoundException: Could not connect to http://sharepoint/_vti_bin/unify/userprofile.svc. TCP error code 10060: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 192.168.0.133:80.  ---> System.Net.WebException: Unable to connect to the remote server ---> System.Net.Sockets.SocketException: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 192.168.0.133:80
   at System.Net.Soc...
Affected Versions:
Fixed by Version:

Update: This is version 3.0.5 of the connector when used in conjunction with IdB 3.0.6

Note: This hit me while doing client work, however currently I do not perceive this as being a show stopper and unless advised otherwise, this is a "nice-to-have".

A better stack trace is

Error occurred in module: Connectors

The following error occurred: 
System.ServiceModel.EndpointNotFoundException: Could not connect to http://sharepoint/_vti_bin/unify/userprofile.svc. TCP error code 10060: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 192.168.0.133:80.  ---> System.Net.WebException: Unable to connect to the remote server ---> System.Net.Sockets.SocketException: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 192.168.0.133:80
   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, Int32 timeout, Exception& exception)
   --- End of inner exception stack trace ---
   at System.Net.HttpWebRequest.GetRequestStream(TransportContext& context)
   at System.Net.HttpWebRequest.GetRequestStream()
   at System.ServiceModel.Channels.HttpOutput.WebRequestHttpOutput.GetOutputStream()
   --- End of inner exception stack trace ---

Server stack trace: 
   at System.ServiceModel.Channels.HttpOutput.WebRequestHttpOutput.GetOutputStream()
   at System.ServiceModel.Channels.HttpOutput.Send(TimeSpan timeout)
   at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.SendRequest(Message message, TimeSpan timeout)
   at System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)
   at System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)
   at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
   at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
   at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

Exception rethrown at [0]: 
   at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
   at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
   at Unify.Communicators.UserProfileManager.ISharePoint2010UserProfileService.GetSchema()
   at Unify.Connectors.SharePoint2010UserProfileConnector..ctor(IGenericWCFCredentialsCommunicatorInformation communicatorInformation, Guid connectorId, IEntitySchema schema, String name, IConnectorGroup connectorGroup, IConnectorEntityPartitionContextFactory contextFactory, Boolean enforceSidHistory, Int32 pageSize, Int32 maxItemsInObjectGraph, Boolean replaceWideAmpersands)
   at Unify.Connectors.SharePoint2010UserProfileConnectorFactory.CreateConnector(XElement communicatorElement, IGenericWCFCredentialsCommunicatorInformation communicatorInformation, Guid connectorId, IEntitySchema schema, String name, IConnectorGroup connectorGroup, IConnectorEntityPartitionContextFactory contextFactory, Int32 pageSize, Int32 maxItemsInObjectGraph, Boolean replaceWideAmpersands)
   at Unify.Connectors.SharePoint2010ConnectorFactoryBase.CreateComponent(IMultiKeyedConnectorFactoryInformation factoryInformation)
   at Unify.Framework.PlugInGeneratorBase`4.CreateComponent(TFactoryInfo factoryInformation)
   at Unify.Framework.ConnectorEngineConnectorGenerator.CreateComponent(IMultiKeyedConnectorFactoryInformation factoryInformation)
   at Unify.Framework.ConnectorGenerator.CreateComponent(IConnectorGeneratorInformation factoryInformation)
   at Unify.Framework.PollingConnectorEngineConfigurationFactory.CreateConnectorConfigurationBase(XElement xmlConfiguration, IConnectorHelper connectorHelper, ITiming pollingTiming, INotificationMessageService messageService, ITiming getAllEntitiesTiming, IConnectorGroup connectorGroup)
   at Unify.Framework.PollingConnectorConfigurationFactoryBase`2.CreateComponent(IConnectorConfigurationFactoryInformation`1 factoryInformation)
   at Unify.Framework.PlugInGeneratorBase`4.CreateComponent(TFactoryInfo factoryInformation)
   at Unify.Framework.ConnectorConfigurationGeneratorBase`4.CreateConnectorConfigurationFromNode(THelper connectorHelper, XElement connectorNode, TConnectorConfigurationCollection connectorConfigurationCollection, IConnectorGroup connectorGroup)
   at Unify.Framework.ConnectorConfigurationGeneratorBase`4.CreateConnectorConfigurationCollection(XElement xmlCollection, THelper connectorHelper)
   at Unify.Framework.ConnectorEngine.Initialize()
   at Unify.Framework.UnifyEngine.Initialize()

Raising priority.

This issue caused a problem at QDET where the Identity Broker service wouldn't start due to the unavailability of the SharePoint instance.

An interim workaround for this issue is to change the SharePoint connector to a placeholder connector during the SharePoint outage if the Identity Broker service is also disabled in this time.

I would like to add a comment supporting this issue as a major issue. It is a major issue that the Identity Broker service in its entirety fails if there is an error on the sharepoint end. All the rest of the IdB Connectors and adapters are totally offline which is a major issue. If a resolution to this could be achieved I would appreciate it.

Also, I would recommend the documentation (somewhere central) of the Placeholder workaround.

thanks,
Craig Gilmour

QDET has noted again this issue will become important as their SharePoint instance goes live in Production.

This was because the connector would attempt to retrieve the types available in the SharePoint instance when first constructed. I have moved this behaviour to do this when it is first needed if it hasn't been done already (before it needs to convert data). Marked as resolved.

Behaviour confirmed in a SharePoint instance. The Identity Broker service starts up when SharePoint is unavailable, and imports behave as normal. Issue closed.