IWMSCacheProxy.QueryCacheMissPolicy (C#)
Previous | Next |
IWMSCacheProxy.QueryCacheMissPolicy (C#)
The server calls the QueryCacheMissPolicy method to query the cache plug-in for a cache-miss policy.
Syntax
Parameters
bstrOriginUrl
[in] string containing the origin URL.
pUserContext
[in] IWMSContext object containing the user context.
pCommandContext
[in] IWMSCommandContext object containing the command context.
pPresentationContext
[in] IWMSContext object containing the presentation context.
pCachePluginContext
[in] object containing a cache plug-in context.
lQueryType
[in] Member of the WMS_CACHE_QUERY_TYPE_FLAGS enumeration type that indicates why the server called IWMSCacheProxy.QueryCache. This must be a bitwise OR of one or more 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] IWMSCacheProxyCallback object containing the callback function. The cache plug-in calls IWMSCacheProxyCallback.OnQueryCacheMissPolicy to respond to a call to QueryCache.
varContext
[in] object containing a value defined by the server to identify which call to QueryCacheMissPolicy the plug-in is responding to when it calls IWMSCacheProxyCallback.OnQueryCacheMissPolicy. You must pass this value back unaltered.
Return Values
This method does not return a value. To report an error, the plug-in can throw a COMException object to the server. If the plug-in uses the IWMSEventLog object to log error information, it is recommended that it throw NS_E_PLUGIN_ERROR_REPORTED (0xC00D157D). 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 object to send custom error information to the Windows Event Viewer, throwing NS_E_PLUGIN_ERROR_REPORTED stops the server from also logging to the event viewer. For more information about plug-in error information, see Identifying Plug-in Errors.
Remarks
A proxy server must call QueryCache on the cache plug-in and receive a cache miss before it calls QueryCacheMissPolicy. A custom cache plug-in can use the WMS_CACHE_QUERY_TYPE_FLAGS enumeration type in the lQueryType parameter to direct implementation of a cache-miss policy.
Example Code
using Microsoft.WindowsMediaServices.Interop; using System.Runtime.InteropServices; void IWMSCacheProxy.QueryCacheMissPolicy ( string bstrOriginUrl, IWMSContext pUserContext, IWMSCommandContext pCommandContext, IWMSContext pPresentationContext, object pCachePluginContext, int lQueryType, IWMSCacheProxyCallback pCallback, object varContext ) { try { int nOpenFlag = (int)WMS_CACHE_QUERY_TYPE_FLAGS.WMS_CACHE_QUERY_OPEN; int nGCI = lQueryType & ((int)WMS_CACHE_QUERY_TYPE_FLAGS.WMS_CACHE_QUERY_GET_CONTENT_INFO); int nReverseProxy = lQueryType & ((int)WMS_CACHE_QUERY_TYPE_FLAGS.WMS_CACHE_QUERY_REVERSE_PROXY); // The ContentInfo class is user-defined and includes // information about a cached item. ContentInfo ci = new ContentInfo(bstrOriginUrl,null); // An open request was issued. if((nOpenFlag & lQueryType)!=0) { // Retrieve content information for normal mode. if(nReverseProxy==0) { ci.CacheProxyCallback = pCallback; ci.varContext = varContext; CacheProxyServer.GetContentInformation(bstrOriginUrl, pPresentationContext, null, null, this, ci); } // Reverse proxy mode: // Map the requested URL to the reverse proxy URL. // The call to the user-defined GetContentInfo() searches // a user-defined reverse proxy ContentInfo object for a // "ReverseProxy" string. else { ContentInfo ciRP = null; GetContentInfo(bstrOriginUrl,out ciRP); WMS_CACHE_QUERY_MISS_RESPONSE Response = WMS_CACHE_QUERY_MISS_RESPONSE.WMS_CACHE_QUERY_MISS_PLAY_ON_DEMAND; // Play the content as a broadcast stream. if((ciRP.ContentType & 1 )!=0) { Response = WMS_CACHE_QUERY_MISS_RESPONSE.WMS_CACHE_QUERY_MISS_PLAY_BROADCAST; } // Play the content on demand. else { Response = WMS_CACHE_QUERY_MISS_RESPONSE.WMS_CACHE_QUERY_MISS_PLAY_ON_DEMAND; } // Create a content information context. IWMSContext ContentInfoContext = null; GetContentInfoContext(ci,out ContentInfoContext); // Call OnQueryCacheMissPolicy(). pCallback.OnQueryCacheMissPolicy(0, Response, ciRP.CacheUrl, null, ContentInfoContext, varContext); } } // A get content information (GCI) request was issued. if((nGCI & lQueryType)!=0) { // Forward the request upstream. WMS_CACHE_QUERY_MISS_RESPONSE Response = WMS_CACHE_QUERY_MISS_RESPONSE.WMS_CACHE_QUERY_MISS_FORWARD_REQUEST; IWMSContext ContentInfoContext = null; GetContentInfoContext(ci,out ContentInfoContext); pCallback.OnQueryCacheMissPolicy(0, Response, bstrOriginUrl, null, ContentInfoContext, varContext); } // A downstream cache proxy server propagated a remote // cache proxy event. Forward the event to an upstream server. if((lQueryType & (int)WMS_CACHE_QUERY_TYPE_FLAGS.WMS_CACHE_QUERY_CACHE_EVENT)!=0) { pCallback.OnQueryCacheMissPolicy(0, WMS_CACHE_QUERY_MISS_RESPONSE.WMS_CACHE_QUERY_MISS_FORWARD_REQUEST, null, this, null, varContext); } } catch(Exception e) { throw new COMException(); } return; }
Requirements
Reference: Add a reference to Microsoft.WindowsMediaServices.
Namespace: Microsoft.WindowsMediaServices.Interop.
Assembly: Microsoft.WindowsMediaServices.dll.
Library: WMSServerTypeLib.dll.
Platform: Windows Server 2003, Enterprise Edition; Windows Server 2003, Datacenter Edition; Windows Server 2008.
See Also
Previous | Next |