IWMSCacheProxy.QueryCacheMissPolicy (C#)
The server calls the QueryCacheMissPolicy method to query the cache plug-in for a cache-miss policy.
void IWMSCacheProxy.QueryCacheMissPolicy(
string bstrOriginUrl,
IWMSContext pUserContext,
IWMSCommandContext pCommandContext,
IWMSContext pPresentationContext,
object pCachePluginContext,
int lQueryType,
IWMSCacheProxyCallback pCallback,
object varContext
);
Arguments
[in] string containing the origin URL. |
|
[in] IWMSContextIWMSContext Object (C#) containing the User Context. |
|
[in] IWMSCommandContextIWMSCommandContext Object (C#) containing the Command Context. |
|
[in] IWMSContext object containing the Presentation Context. |
|
[in] object containing a cache plug-in context. |
|
[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. |
[in] IWMSCacheProxyCallbackIWMSCacheProxyCallback Object (C#) containing the callback function. The cache plug-in calls IWMSCacheProxyCallback.OnQueryCacheMissPolicy to respond to a call to QueryCache. |
|
[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 Value
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 IWMSEventLogIWMSEventLog Object (C#) 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
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.