cancel
Showing results for 
Search instead for 
Did you mean: 

Retrieving Device Count for a Server

Former Member
0 Kudos

I am looking for some sample code which can help me retrieve Total No. of Devices registered on a Server /Farm.

I tried using the Stored Query Example.

public static string serverCapacity_StoredQuery()
        {
            //String contextId = Guid.NewGuid().ToString();
            AfariaStoredQueriesService.StoredQueriesServiceClient svcStoredQueries = null;
            try
            {

                //string apiAddress = "172.18.1.**";
                svcStoredQueries = new AfariaStoredQueriesService.StoredQueriesServiceClient("WSHttpBinding_IStoredQueriesService");
                svcStoredQueries.ClientCredentials.Windows.ClientCredential.Domain = afariaDomain;
                svcStoredQueries.ClientCredentials.Windows.ClientCredential.UserName = afariaUser;
                svcStoredQueries.ClientCredentials.Windows.ClientCredential.Password = afariaPassword;
                svcStoredQueries.InitContext(Guid.NewGuid().ToString());
                svcStoredQueries.SetTenantIdContext(0);

                AfariaStoredQueriesService.DataState state = new AfariaStoredQueriesService.DataState();
                StoredQueryFilter filter = new StoredQueryFilter();
                filter.QueryId = 1427;
                filter.DoNotAddTenantId = true;
                filter.TenantIdOverride = -1;
                filter.StartRow = -1;
                filter.MaxRows = 5000;

                filter.NameValueLists = new FilterNameValueList[1];
                filter.NameValueLists[0] = new FilterNameValueList();
                filter.NameValueLists[0].VariableName = "nvwh_mkr_filter";
                filter.NameValueLists[0].NameValueListEntries = new FilterNameValueEntry[1];
                filter.NameValueLists[0].NameValueListEntries[0] = new FilterNameValueEntry();
                filter.NameValueLists[0].NameValueListEntries[0].ColumnName = "";
                filter.NameValueLists[0].NameValueListEntries[0].DataType = "string";
                filter.NameValueLists[0].NameValueListEntries[0].DataValue = "%" + "" + "%";
                filter.NameValueLists[0].NameValueListEntries[0].Operator = "like";
                filter.NameValueLists[0].NameValueListEntries[0].Connector = "";

                DataSetSurrogate dss = svcStoredQueries.GetFirstStoredQueryFiltered(filter, out state);

                return (dss.ToString());
            }
            finally
            {
                if (svcStoredQueries != null)
                {
                    svcStoredQueries.Close();// Shared, so don't CloseContext()
                    svcStoredQueries = null;
                }
            }

        }

Seems this is not solving my issue. Also I am getting the following error, Please suggest.

  1. System.ServiceModel.CommunicationObjectFaultedException: The communication object, System.ServiceModel.Channels.ServiceChannel, cannot be used for communication because it is in the Faulted state.

Server stack trace:

   at System.ServiceModel.Channels.CommunicationObject.Close(TimeSpan timeout)

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 System.ServiceModel.ICommunicationObject.Close(TimeSpan timeout)

   at System.ServiceModel.ClientBase`1.System.ServiceModel.ICommunicationObject.Close(TimeSpan timeout)

   at System.ServiceModel.ClientBase`1.Close()

   at SAPAfariaProxy.ApiHelper.serverCapacity_StoredQuery() in c:\Sap\Sources - Working Code - 17\SAPAfariaProxy\SAPAfariaProxy\ApiHelper.cs:line 1057

   at SAPAfariaProxy.WebServices.SAPAfariaProxyService.deviceCount() in c:\Sap\Sources - Working Code - 17\SAPAfariaProxy\SAPAfariaProxy\WebServices\SAPAfariaProxyService.asmx.cs:line 95

Accepted Solutions (0)

Answers (1)

Answers (1)

jtaylor
Active Participant
0 Kudos

I haven't reviewed your code yet, but that error is normally a result of buffer problems. It can be many other things, but increasing the buffers in the app.config or through code may help. The Afaria API 101 document covers this some.

jtaylor
Active Participant
0 Kudos

Looking at this code, it looks like a working example that I've provided previously. I'm not sure what the impact of specifying the ColumnName as an empty string would be, but since you are searching for any results, ClientFriendlyName should be acceptable. If you're still having problems after that, it is probably because of the buffers. This query returns a good bit of data per device, so searching across all tenants would result in a lot of data overall.

Please let me know if this helps you resolve the question, and mark the question as answered for other's reference if so!