IWMSCacheProxy::QueryCache
.gif)
| Previous | Next |
IWMSCacheProxy::QueryCache
The QueryCache method is called by the server to direct the cache plug-in to search the cache for specific content.
Syntax
HRESULT QueryCache( BSTR bstrOriginUrl , IWMSContext* pUserContext , IWMSCommandContext* pCommandContext , IWMSContext* pPresentationContext , long lQueryType , IWMSCacheProxyCallback* pCallback , VARIANT varContext );
Parameters
bstrOriginUrl
[in] BSTR containing the origin URL.
pUserContext
[in] Pointer to an IWMSContext interface containing the user context.
pCommandContext
[in] Pointer to an IWMSCommandContext interface containing the command context.
pPresentationContext
[in] Pointer to an IWMSContext interface containing the presentation context.
lQueryType
[in] Member of the WMS_CACHE_QUERY_TYPE_FLAGS enumeration type that indicates why the server called IWMSCacheProxy::QueryCache. This must be one of the following values.
| Value | Description |
| WMS_CACHE_QUERY_OPEN | A client using a downstream proxy requested content. |
| WMS_CACHE_QUERY_GET_CONTENT_INFO | A downstream proxy requested information about content cached on the remote computer. |
| WMS_CACHE_QUERY_CACHE_EVENT | A cache event notice is being sent upstream. If WMS_CACHE_QUERY_LOCAL_EVENT is set, the cache event was generated by the local computer. Otherwise, it was sent by a downstream proxy server. |
| WMS_CACHE_QUERY_REVERSE_PROXY | A downstream server is configured to be a reverse proxy server. If a cache proxy plug-in supports reverse proxy, it can use this flag to determine whether it must map client requests to an upstream server farm. |
| WMS_CACHE_QUERY_LOCAL_EVENT | The local server is generating an event to send upstream. |
pCallback
[in] Pointer to an IWMSCacheProxyCallback interface. The cache plug-in calls IWMSCacheProxyCallback::OnQueryCache to respond to a call to QueryCache.
varContext
[in] VARIANT containing a value defined by the server to identify which call to QueryCache the plug-in is responding to when it calls IWMSCacheProxyCallback::OnQueryCache. The plug-in must pass this value back unaltered.
Return Values
If the method succeeds, the plug-in must return S_OK. To report an error, the plug-in can return any HRESULT other than S_OK. If the plug-in uses the IWMSEventLog interface to log error information directly to the Windows Event Viewer, it is recommended that it return NS_E_PLUGIN_ERROR_REPORTED. Typically, the server attempts to make plug-in error information available to the server object model, the Windows Event Viewer, and the troubleshooting list in the details pane of the Windows Media Services MMC. However, if the plug-in uses the IWMSEventLog interface to send custom error information to the Windows Event Viewer, returning NS_E_PLUGIN_ERROR_REPORTED stops the server from also logging to the event viewer. For more information about retrieving plug-in error information, see Identifying Plug-in Errors.
Example Code
HRESULT STDMETHODCALLTYPE
CCachePlugin::QueryCache( BSTR bstrOriginUrl,
IWMSCommandContext *pCommandContext,
IWMSContext *pPresentationContext,
long lBitFlags,
IWMSCacheProxyCallback *pCallback,
VARIANT varContext
)
{
HRESULT hr = S_OK;
IWMSContext *pContentInfo = NULL;
WMS_CACHE_QUERY_RESPONSE OpenResponse;
// You can implement a database to track cached content.
pCacheEntry = m_CacheDatabase.Find( bstrOriginUrl );
if( NULL == m_pCacheEntry )
{
// The content is not in the cache.
OpenResponse = WMS_CACHE_QUERY_MISS;
}
else
{
// The content is cached and you need to determine whether
// it has expired. Expiration is the length of time, from
// the moment at which content was last cached, that it can
// be made available to a client.
// The UpdateContentTime() function and the
// NeedToCheckVersion() function are user-defined.
pCacheEntry->UpdateContentTime();
if( !pCacheEntry->NeedToCheckVersion() )
{
// If the content has not expired, signal a cache hit.
OpenResponse = WMS_CACHE_QUERY_HIT_PLAY_ON_DEMAND;
hr = S_OK;
goto exit;
}
hr = pCacheEntry->GetContentInformation( &pContentInfo );
hr = pCacheProxyCallback->CompareContentInformation(
bstrOriginUrl,
pContentInfo,
pPresentationContext,
this,
(IWMSProxyContext*) this,
this,
varContext
);
return( S_OK );
}
EXIT:
if( NULL != pCacheEntry )
{
pCacheEntry->GetCacheUrl( & bstrOriginUrl );
}
// Call OnQueryCache and send a cache hit or
// miss to the server.
hr = pCacheProxyCallback->OnQueryCache(
hr,
OpenResponse,
bstrOriginUrl,
m_pContentInfoContext,
(IUnknown *) m_pCachePluginContext,
varContext
);
return( S_OK );
}
Requirements
Header: streamcache.h.
Library: WMSServerTypeLib.dll.
Platform: Windows Server 2003, Enterprise Edition; Windows Server 2003, Datacenter Edition; Windows Server 2008.
See Also
- IWMSCacheProxy Interface
- IWMSCacheProxy::QueryCacheMissPolicy
- IWMSCacheProxyCallback Interface
- IWMSCommandContext Interface
- IWMSContext Interface
| Previous | Next |