Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
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.