Using the ConcurrentBag as an object pool for an ASP.NET application
Instead of


    if (initializeCount &gt; 0)
{
    int counter = 0;
    while (counter++ &lt; initializeCount)
    {
        _objects.Add(_objectGenerator());
    }
}



I would prefer a for loop for initial initialization:

for (int i = 0; i &lt; initializeCount; ++i)
{
    _object.Add(_objectGenerator());
}

The biggest problem however is that GetObject will return a new object anyway - even if the pool is empty. This violates your requirement:


  The object pool must have a maximum size restriction, so that callers of GetObject wait in line to get an instance of the pooled object. 


As mentioned by Scott in his comment to your question you should use Take to retrieve an item as it will block until one is available.
You might want to consider providing some sort of "object resetter" action which gets called whenever you have retrieved an item from the pool which puts the item into a clean initial state automatically.