שאלה:
איך אפשר לגרום ל-ASP.Net 2.0 עם ה-Providerים השונים שלו לרוץבשביל מספר אתרים שיש לי רק Instance אחד ומספר מסדי נתונים?
תשובה:
כברירת מחדל ה-ASP.Net Providers יוצרים לעצמם מסד נתונים בשם aspnetdb.mdf ב-App_data של האתר, אבל זה לא האפשרות היחידה.
ניתן להריץ את ה-aspnet_regsql.exe שמגיע עם דוט נט 2.0 והוא ידאג להתקין את הטבלאות הרלוונטיות איפה שתגיד לו.
כברירת מחדל הוא יושב ב-
יש שתי אפשרויות להרצת הכלי: עם פרמטרים או בלי פרמטרים.
שמריצים את כלי עם פרמטרים נריץ אותו ה-CMD (דרך Start --> Run -- > Cmd ונגיע לתיקיית הפריימוורק או דרך ה-Visual Studio 2005 Command prompt). יש הרבה מאוד אפשרויות להרצה דרך ה-CMD.
פירוט מלא אפשר לראות ב-ASP.NET SQL Server Registration Tool (Aspnet_regsql.exe).
למשל אפשר לפרט את פרטי ההתחברות למסד נתונים (מחרוזת חיבור, שם מחשב, שם מסד, שם משתמש וסיסמה ועוד רבים).
כמו כן, גם אפשר לפרט איזה Providerים נרצה בדיוק שיותקנו:
אם כבר מדברים על הכלי הזה, חשוב להזכיר שבאמצעותו גם אפשר להתקין את הסקריפטים של Sql Caching Dependency לסיקוול 2005 או אם נרצה להעביר את ה-Session שלנו שישמור מידע במסד הנתונים סיקוול.
למשל הנה הפקודה להתקנת Membership Tables ו-Role Manager Tables בסיקוול על המכונה הלוקאלית במסד בשם Northwind עם חיבור למסד באמצעות המשתמש המחובר כרגע ב-Windows.
aspnet_regsql.exe -E -S localhost -D Northwind -A rm
ה-E מייצג אימות באמצעות המשתמש המחובר כרגע, ה-S מייצג את השרת, ה-D מייצג את המסד נתונים וה-A אומר להתקין Role Provider ו-Membership.
ניתן גם להריץ את הכלי מתוך Windows בלי פרמטרים ואז יפתח חלון גרפי שמאפשר לעשות את ההתקנה דרכו. (פשוט להפעיל את הקובץ דרך Explorer)
חשוב לשים לב שבכלי הגרפי מותקנים כל ה-Providerים הסטנדרטיים ואין אפשרות לבחור מה יותקן.
כמו כן, אם אין באפשרותך להריץ בעצמך את הכלים על האתר המרוחק, באותו תיקייה בדיוק ישנם סקריפטי ה-SQL המרוצים בסופו של דבר.
אם כבר אנחנו בתיקיית הפריימוורק ומפטפטים על Providerים, נחזור להתחלה ונזכר מה הבעיה.
כברירת מחדל ASP.Net 2.0 מתקין את ה-Providerים בתיקיית App_data במסד aspnet_db.mdf.
ניכנס לתקיית config בתיקיית הפריימוורק ונפתח את הקובץ machine.config.
<connectionStrings>
<add name="LocalSqlServer" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient"/>
</connectionStrings>
נוכל לראות שברירת מחדל יש ConnectionString בשם LocalSqlServer שמוסיף קובץ ב-aspnetdb.mdf בתיקיית ה-App_code (וזה נוצר אם הוא לא קיים).
נביט למשל על ה-Membership Provider:
<membership>
<providers>
<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="LocalSqlServer" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" applicationName="/" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10" passwordStrengthRegularExpression=""/>
</providers>
</membership>
אפשר לראות שכברירת מחדל ה-Membership Provider משתמש במחרוזת חיבור הזו של aspnetdb.mdf.
וזאת הסיבה להגדרות ברירת מחדל שיש לנו שאנחנו עובדים ב-ASP.Net 2.0 לאיפה יוגדרו ה-Providerים אם לא הגדרנו בעצמנו.
קישור: http://www.tapuz.co.il/tapuzforum/main/Viewmsg.asp?forum=831&msgid=109668386