This article was translated by machine. To view in the article in English, select the English check box. You can also display the English text in a popup window by moving the mouse pointer over the text.
الترجمة
الأصلي
This documentation is archived and is not being maintained.

VirtualPathProvider الفئة

Visual Studio 2010

توفر التعيين من الطرق التي تمكن من تطبيق ويب باسترداد موارد من ظاهري ملف الالنظام.

مساحة الاسم:  System.Web.Hosting
التجميع:  System.Web (في System.Web.dll)

public abstract class VirtualPathProvider : MarshalByRefObject

VirtualPathProvider توفر الفئة مجموعة من الأساليب لتنفيذ الظاهري ملف نظام لتطبيق ويب. في ظاهري ملف النظام و ملف s الدلائل تتم إدارتها من قبل مخزن بيانات غير ذلك غير ملف نظام تشغيل للنظام التي تم توفيرها من قبل الملقم. على سبيل المثال، يمكنك استخدام ظاهري نظام الملفات لتخزين محتوى في قاعدة بيانات SQL الخادم.

يمكنك تخزين أي ملف يتم معالجة طلب في ظاهري نظام الملفات. يتضمن هذا:

  • الصفحات ASP.NET, شكل رئيسي الصفحات, مستخدم عناصر التحكم, و غير ذلك الكائنات.

  • قياسي ويب الصفحات مع ملحقات such كـ .htm و .jpg.

  • أي مخصص ملحق mapped إلى a BuildProvider مثيل.

  • أي named سمة في the App_Theme مجلد.

You cannot store ASP.NET تطبيق مجلدات أو ملفات that توليد تطبيق-المستوى تجميعات في a ظاهري ملف النظام. يتضمن هذا:

  • The عمومي.ASAX ملف.

  • ويب.config ملفات.

  • مخطط الموقع بيانات ملفات used بواسطة the XmlSiteMapProvider.

  • Directories that contain تطبيق تجميعات أو that توليد تطبيق تجميعات: Bin,App_Code,App_GlobalResources، أيApp_LocalResources.

  • المجلد بيانات تطبيق، App_Data.

ملاحظةملاحظة

إذا كان موقع ويب هو precompiled للنشر، محتوى توفره VirtualPathProviderالمثيل هو غير المترجمة، وليس VirtualPathProviderمثيلات مستخدمة من قبل موقع المترجمة مسبقاً.

تسجيل VirtualPathProvider

مخصص VirtualPathProviderيجب أن يكون مثيل مسجَّل مع النظام تصنيف ASP.NET باستخدام HostingEnvironment.RegisterVirtualPathProviderيتم تنفيذ أسلوب قبل أية صفحة التحليل أو التجميع بتطبيق ويب.

بشكل عام، على VirtualPathProviderالمثيل مسجَّل في AppInitializeأسلوب معرف في App_Codeالدليل، أو أثناء Application_Startحدث في Global.asaxالملف. على سبيل مثال التسجيل VirtualPathProviderالمثيل في AppInitializeأسلوب، راجع مقطع مثال.

يمكنك regهوter VirtualPathProviderالمثيل أثناء أحداث غير ذلك، لكن الصفحات المترجمة وتخزينها مؤقتاً قبل VirtualPathProviderمثيل هو سوف لا يمكن إبطال regهوtered، حتى لو الجديدة VirtualPathProviderمثيل الآن تقديم المصدر للصفحة المترجمة مسبقاً.

ملاحظات للمسئولين عن الإرث

متى يورث VirtualPathProvider، يجب يمنع الأعضاء التاليين:

إذا كان مخصص VirtualPathProviderيدعم فئة الدلائل في الظاهرية ملف الالنظام، يجب يمنع الأعضاء التاليين.

ملاحظةملاحظة

إذا كان جهاز ظاهري ملف يحتوي الالنظام على السمات الخاصة بموقع ويب (بواسطة إنشاء ظاهري App_Themesالدليل)، المخصص الخاص بك VirtualPathProviderيجب أن تدعم فئة الدلائل.

مخصص VirtualPathProviderفئة تعمل مع الفئات المشتقة من VirtualFileو VirtualDirectoryفئات. يجب تطبيق الفئات المشتقة من هذه الأنواع لتوفير ملف ومعلومات الدليل من جهاز ظاهري ملف الالنظام. على سبيل مثال من على $ $ $ $ مخصص VirtualFileالتنفيذ، انظر قسم مثال VirtualFileفئة نظرة عامة حول الموضوع. على سبيل مثال من على $ $ $ $ مخصص VirtualDirectoryالتنفيذ، انظر قسم مثال VirtualDirectoryفئة نظرة عامة حول الموضوع.

مثال التعليمة البرمجية التالية هي VirtualPathProviderفئة التطبيق الذي يقوم بإنشاء ظاهري ملف الالنظام باستخدام معلومات مخزنة في DataSetالكائن. يعمل المثال تعليمات برمجية مع أمثلة تعليمات برمجية VirtualFileو VirtualDirectoryالفئات لتوفير ظاهري موارد من مخزن بيانات الذي تم تحميله في DataSetالكائن.

وهذا مثال من الأجزاء الالرابع: VirtualPathProviderتطبيق فئة، تستخدم لتعبئة ملف بيانات XML DataSetالكائن، AppStartالكائن الذي يحتوي على AppInitializeالطريقة المستخدمة لتسجيل VirtualPathProviderفئة ذات الالنظام الترجمة، وصفحة ASP.NET التي توفر الارتباطات إلى ظاهري الملفات.

إلى استخدم هذا نموذج تعليمات برمجية في تطبيق، اتبع الخطوات التالية.

  1. إنشاء نموذج تطبيق تشغيل الخادم ويب.

  2. قم بنسخ تعليمات برمجية المصدر ل مخصص VirtualPathProviderكائن (انظر أدناه) إلى ملف في تطبيق الخاص App_Codeالدليل.

  3. قم بنسخ تعليمات برمجية المصدر ل مخصص VirtualDirectoryكائن (راجع مقطع مثال في VirtualDirectoryالموضوع نظرة عامة حول فئة) ضمن ملف في تطبيق App_Codeالدليل.

  4. قم بنسخ تعليمات برمجية المصدر ل مخصص VirtualFileكائن (راجع مقطع مثال في VirtualFileالموضوع نظرة عامة حول فئة) ضمن ملف في تطبيق App_Codeالدليل.

  5. قم بنسخ تعليمات برمجية المصدر ل AppStartكائن (انظر أدناه) إلى ملف في تطبيق الخاص App_Codeالدليل.

  6. نسخ بيانات XML (انظر أدناه) إلى ملف باسم XMLData.xmlإلى ملف في تطبيق App_Dataالدليل.

  7. قم بنسخ default.aspxملف (انظر أدناه) في الدليل الجذر تطبيق نموذج. استخدام مستعرض ويب لفتح default.aspxملف، ثم انقر فوق الارتباطات الموجودة تشغيل الصفحة لمشاهدة محتويات s. ملف الظاهري

أول مثال هو مخصص VirtualPathProviderفئة. DirectoryExists و FileExistsيتم تجاوز وظائف للإشارة إلى ما إذا كان الدليل المطلوب موجوداً في الظاهرية ملف الالنظام. GetDirectory و GetFileيتم تجاوز وظائف لإرجاع مخصصة VirtualDirectoryو VirtualFileالمثيلات التي تحتوي على معلومات من ظاهري ملف النظام.

الفئة كما توفر GetVirtualDataالطريقة المستخدمة بواسطة VirtualDirectoryو VirtualFileالفئات إلى الوصول DataSetالكائن الذي يحتوي على بيانات النظام الملف الظاهري. في تطبيق إنتاج، وهذا أسلوب هي عادة تنفيذها في كائن عمل مسؤولاً عن التعامل مع مخزن بيانات.


using System;
using System.Data;
using System.Security.Permissions;
using System.Web;
using System.Web.Caching;
using System.Web.Hosting;

namespace Samples.AspNet.CS
{
  [AspNetHostingPermission(SecurityAction.Demand, Level = AspNetHostingPermissionLevel.Medium)]
  [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.High)]
  public class SamplePathProvider : VirtualPathProvider
  {
    private string dataFile;

    public SamplePathProvider()
      : base()
    {
    }

    protected override void Initialize()
    {
      // Set the datafile path relative to the application's path.
      dataFile = HostingEnvironment.ApplicationPhysicalPath + "App_Data\\XMLData.xml";
    }

    /// <summary>
    ///   Data set provider for the SampleVirtualDirectory and
    ///   SampleVirtualFile classes. In a production application
    ///   this method would be on a provider class that accesses
    ///   the virtual resource data source.
    /// </summary>
    /// <returns>
    ///   The System.Data.DataSet containing the virtual resources 
    ///   provided by the SamplePathProvider.
    /// </returns>
    public DataSet GetVirtualData()
    {
      // Get the data from the cache.
      DataSet ds = (DataSet)HostingEnvironment.Cache.Get("VPPData");
      if (ds == null)
      {
        // Data not in cache. Read XML file.
        ds = new DataSet();
        ds.ReadXml(dataFile);

        // Make DataSet dependent on XML file.
        CacheDependency cd = new CacheDependency(dataFile);

        // Put DataSet into cache for maximum of 20 minutes.
        HostingEnvironment.Cache.Add("VPPData", ds, cd,
          Cache.NoAbsoluteExpiration,
          new TimeSpan(0, 20, 0),
          CacheItemPriority.Default, null);

        // Set data timestamp.
        DateTime dataTimeStamp = DateTime.Now;
        // Cache it so we can get the timestamp in later calls.
        HostingEnvironment.Cache.Insert("dataTimeStamp", dataTimeStamp, null,
          Cache.NoAbsoluteExpiration,
          new TimeSpan(0, 20, 0),
          CacheItemPriority.Default, null);
      }
      return ds;
    }

    /// <summary>
    ///   Determines whether a specified virtual path is within
    ///   the virtual file system.
    /// </summary>
    /// <param name="virtualPath">An absolute virtual path.</param>
    /// <returns>
    ///   true if the virtual path is within the 
    ///   virtual file sytem; otherwise, false.
    /// </returns>
    private bool IsPathVirtual(string virtualPath)
    {
      String checkPath = VirtualPathUtility.ToAppRelative(virtualPath);
      return checkPath.StartsWith("~/vrdir", StringComparison.InvariantCultureIgnoreCase);
    }

    public override bool FileExists(string virtualPath)
    {
      if (IsPathVirtual(virtualPath))
      {
        SampleVirtualFile file = (SampleVirtualFile)GetFile(virtualPath);
        return file.Exists;
      }
      else
        return Previous.FileExists(virtualPath);
    }

    public override bool DirectoryExists(string virtualDir)
    {
      if (IsPathVirtual(virtualDir))
      {
        SampleVirtualDirectory dir = (SampleVirtualDirectory)GetDirectory(virtualDir);
        return dir.Exists;
      }
      else
        return Previous.DirectoryExists(virtualDir);
    }

    public override VirtualFile GetFile(string virtualPath)
    {
      if (IsPathVirtual(virtualPath))
        return new SampleVirtualFile(virtualPath, this);
      else
        return Previous.GetFile(virtualPath);
    }

    public override VirtualDirectory GetDirectory(string virtualDir)
    {
      if (IsPathVirtual(virtualDir))
        return new SampleVirtualDirectory(virtualDir, this);
      else
        return Previous.GetDirectory(virtualDir);
    }

    public override CacheDependency GetCacheDependency(
      string virtualPath, 
      System.Collections.IEnumerable virtualPathDependencies, 
      DateTime utcStart)
    {
      if (IsPathVirtual(virtualPath))
      {
        System.Collections.Specialized.StringCollection fullPathDependencies = null;

        // Get the full path to all dependencies.
        foreach (string virtualDependency in virtualPathDependencies)
        {
          if (fullPathDependencies == null)
            fullPathDependencies = new System.Collections.Specialized.StringCollection();

          fullPathDependencies.Add(virtualDependency);
        }
        if (fullPathDependencies == null)
          return null;

        // Copy the list of full-path dependencies into an array.
        string[] fullPathDependenciesArray = new string[fullPathDependencies.Count];
        fullPathDependencies.CopyTo(fullPathDependenciesArray, 0);
        // Copy the virtual path into an array.
        string[] virtualPathArray = new string[1];
        virtualPathArray[0] = virtualPath;

        return new CacheDependency(virtualPathArray, fullPathDependenciesArray, utcStart);
      }
      else
        return Previous.GetCacheDependency(virtualPath, virtualPathDependencies, utcStart);
    }
  }
  


المثال الثاني بيانات XML الملف المستخدم لملء DataSetإرجاع كائن بواسطة المخصصة VirtualPathProviderالكائن. بيانات XML هو Th هو المستخدمة لتوضيح استخدام VirtualPathProvider، VirtualDirectory، و VirtualFileالالكائنات لاسترداد البيانات من البيانات خارجي و هو غير معد لتمثيل مخزن بيانات الإنتاج ذات جودة عالية.

<?xml version="1.0" encoding="utf-8" ?>
  <resource type="dir" 
    path="/vrDir" 
    parentPath="" 
    content="">
    <resource type="file" 
      path="/vrDir/Level1FileA.vrf"
      parentPath="/vrDir" 
      content="This is the content of file Level1FileA.">
    </resource>
    <resource type="file" 
      path="/vrDir/Level1FileB.vrf"
      parentPath="/vrDir" 
      content="This is the content of file Level1FileB.">
    </resource>
    <resource type="dir" 
      path="/vrDir/Level2DirA" 
      parentPath="/vrDir" 
      content="">
    <resource type="file" 
      path="/vrDir/Level2DirA/Level2FileA.vrf" 
      parentPath="/vrDir/Level2DirA" 
      content="This is the content of file Level2FileA.">
    </resource>
    <resource type="file" 
      path="/vrDir/Level2DirA/Level2FileB.vrf"
      parentPath="/vrDir/Level2DirA" 
      content="This is the content of file Level2FileB.">
    </resource>
  </resource>
  <resource type="dir" 
    path="/vrDir/Level2DirB" 
    parentPath="/vrDir" 
    content="">
    <resource type="file" 
      path="/vrDir/Level2DirB/Level2FileA.vrf" 
      parentPath="/vrDir/Level2DirB" 
      content="This is the content of file Level2FileA.">
    </resource>
    <resource type="file" 
      path="/vrDir/Level2DirB/Level2FileB.vrf"
      parentPath="/vrDir/Level2DirB" 
      content="This is the content of file Level2FileB.">
    </resource>
  </resource>
</resource>

المثال الثالث يوفر AppStartالكائن الذي يحتوي على AppInitializeأسلوب. يتم استدعاء هذا الأسلوب أثناء تهيئة أحد تطبيقات ASP.NET لأداء أي مخصص التهيئة المطلوبة. في هذه الحالة، تسجل المخصصة VirtualPathProviderبنية كائن باستخدام ASP.NET النظام.


using System.Web.Hosting;

namespace Samples.AspNet.CS
{
  /// <summary>
  ///   Contains the application initialization method
  ///   for the sample application.
  /// </summary>
  public static class AppStart
  {
    public static void AppInitialize()
    {
      SamplePathProvider sampleProvider = new SamplePathProvider();
      HostingEnvironment.RegisterVirtualPathProvider(sampleProvider);
    } 
  }
}


المثال أخير هو صفحة ASP.NET يحتوي على الارتباطات الظاهرية ملف s الموجودة في الظاهرية ملف الالنظام.



<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
  <meta http-equiv="Content-Type" content="text/html" />
  <title>Virtual Path Provider Example</title>
</head>
<body>
  <form id="form1" runat="server">
    <asp:HyperLink ID="hyperLink1" runat="server" NavigateUrl="vrDir/Level1FileA.vrf" Text="Level 1, File A" /><br />
    <asp:HyperLink ID="hyperLink2" runat="server" NavigateUrl="vrDir/Level1FileB.vrf" Text="Level 1, File B" /><br />
    <asp:HyperLink ID="hyperLink3" runat="server" NavigateUrl="vrDir/Level2DirA/Level2FileA.vrf" Text="Level 2a, File A" /><br />
    <asp:HyperLink ID="hyperLink4" runat="server" NavigateUrl="vrDir/Level2DirA/Level2FileB.vrf" Text="Level 2a, File B" /><br />
    <asp:HyperLink ID="hyperLink5" runat="server" NavigateUrl="vrDir/Level2DirB/Level2FileA.vrf" Text="Level 2b, File A" /><br />
    <asp:HyperLink ID="hyperLink6" runat="server" NavigateUrl="vrDir/Level2DirB/Level2FileB.vrf" Text="Level 2b, File B" /><br />
  </form>
</body>
</html>


يتم تأمين العملية الجزئية لأي عضو عمومي ثابت (مشترك في Visual Basic) من هذا النوع. لن يتم ضمان تأمين العملية الجزئية لأي عضو مثيل.

نظام التشغيل Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, الإصدار x64 من نظام التشغيل Windows XP Professional, Windows XP Starter Edition, Windows Server 2008, نظام التشغيل Windows Server 2003, نظام التشغيل Windows Server 2000 المزود بحزمة الخدمة SP4, نظام التشغيل Windows Millennium Edition, نظام التشغيل Windows 98

لا يدعم .NET Framework و .NET Compact Framework كافة الإصدارات الخاصة بكل نظام أساسي. للحصول على قائمة بالإصدارات المدعمة، راجع متطلبات النظام إطار عمل .NET.

.NET Framework

مدعوم في: 4, 3.5, 3.0, 2.0
إظهار: