public HitSnippet[] GetSnippets(GetSnippetsRequest req)
        {
            HitSnippet[] response;

            if (req.searchToken == null | req.searchToken == "")
            {
                response = new HitSnippet[0];
                return(response);
            }

            remoteChannel.Register();

            if (remoteObj == null)
            {
                remoteObj = new WebServiceBackEnd();
            }

            bool isLocalReq = HttpContext.Current.Request.Url.IsLoopback;

            if ((remoteObj == null) || !(remoteObj.allowGlobalAccess || isLocalReq))
            {
                response = new HitSnippet[0];
                return(response);
            }

            if (req.hitHashCodes.Length < 1)
            {
                response = new HitSnippet[0];
            }
            else
            {
                response = remoteObj.getSnippets(req);
            }

            return(response);
        }
        public HitSnippet[] getSnippets(GetSnippetsRequest req)
        {
            HitSnippet[] response;
            string       searchToken = req.searchToken;

            int[] hitHashCodes = req.hitHashCodes;

            if (!sessionTable.ContainsKey(searchToken))
            {
                response = new HitSnippet[0];
                Logger.Log.Warn("GetSnippets: Invalid Search Token received ");
                return(response);
            }

            ArrayList results = ((SessionData)sessionTable[searchToken]).results;

            if ((results == null) || (results.Count == 0))
            {
                response = new HitSnippet[0];
                Logger.Log.Warn("GetSnippets: Invalid Search Token received ");
                return(response);
            }

            int       i            = 0;
            ArrayList hashCodeList = new ArrayList();

            hashCodeList.AddRange(hitHashCodes);

            response = new HitSnippet[hitHashCodes.Length];
            Logger.Log.Debug("GetSnippets invoked with {0} hitHashCodes", hitHashCodes.Length);

            Query query = ((SessionData)sessionTable[searchToken]).query;

            lock (results.SyncRoot)  {
                string snippet = null;
                foreach (Hit h in results)
                {
                    int hashCode = h.GetHashCode();
                    if (hashCodeList.Contains(hashCode))
                    {
                        hashCodeList.Remove(hashCode);

                        //Queryable queryable = h.SourceObject as Queryable;
                        Queryable queryable = QueryDriver.GetQueryable(h.SourceObjectName);

                        if (queryable == null)
                        {
                            snippet = "ERROR: hit.SourceObject is null, uri=" + h.Uri;
                        }
                        else
                        {
                            snippet = queryable.GetSnippet(ICollection2StringList(query.StemmedText), h);
                        }

                        //GetSnippets always invoked on Target Beagle Node where hits originate:
                        if (snippet == null)
                        {
                            snippet = "";
                        }

                        HitSnippet hs = new HitSnippet();
                        hs.hashCode   = hashCode;
                        hs.snippet    = snippet.Trim();
                        response[i++] = hs;

                        if ((hashCodeList.Count == 0) || (i == hitHashCodes.Length))
                        {
                            return(response);
                        }
                    }
                }         //end foreach
            }             //end lock

            foreach (int hashCode in hashCodeList)
            {
                HitSnippet hs = new HitSnippet();
                hs.hashCode   = hashCode;
                hs.snippet    = InvalidHitSnippetError;
                response[i++] = hs;

                if (i == hitHashCodes.Length)
                {
                    break;
                }
            }
            Logger.Log.Warn("GetSnippets invoked some invalid hitIds");

            return(response);
        }