|
عنوان
|
نويسنده
|
مشاهده
|
تعداد
آراء |
امتياز
|
|
سيستم پيكربندی ASP.NET 2.0 (بخش دوم ) |
مديريت وب |
6562 |
5 |
4 |
سيستم پيكربندی ASP.NET 2.0
سيستم پيكربندی ASP.NET 2.0 (بخش
دوم )
در
بخش اول با اصول
اوليه سيستم پيكربندی ASP.NET 2.0
آشنا شديم .
در اين بخش به بررسی برخی از تنظميات پيكربندی
خواهيم پرداخت .
Connection String
در ASP.NET 1.x ، اطلاعات مربوط به
connection string در بخش <appSetting>
ذخيره می گرديد . در ASP.NET 2.0
، تمامی
اطلاعات در ارتباط با connection-string
در يك بخش جديد
با نام <connectionStrings> ذخيره
می گردد .
ذخيره اطلاعات connection - string در بخش
<appSetting> دارای چالش های مختص به خود
است :
-
زمانی كه اطلاعات connection string در بخش
appSetting ذخيره می گردد ، برای يك كنترل مرتبط با داده نظير SqlCacheDependency
و يا MembershipProvider امكان دستيابی به اطلاعات وجود ندارد .
-
ايمن سازی Connection string با استفاده از الگوريتم
های رمزنگاری چالش های خاص خود را دارد .
-
ويژگی فوق صرفا" در ارتباط با برنامه های ASP.NET
نبوده و تمامی برنامه های دات نت نظير Windows Forms , Web Service
و ساير موارد ديگر را نيز شامل می شود .
با توجه به اين كه اطلاعات
connection string مستقل از بخش appSetting ذخيره
می گردد ، می توان آنان را با استفاده از مجموعه متد
ConnectionString بازيابی نمود .
كد زير نحوه ذخيره
connection string در فايل
Web.config را نشان می دهد .
|
<configuration
xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<connectionStrings>
<add
name="MyConnectionString1"
connectionString="Data Source
providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
|
نحوه بازيابی اطلاعات يك
connection string در برنامه :
|
Public Sub Page_Load (sender
As Object, e As EventArgs)
...
Dim dbConnection as New _
SqlConnection(ConfigurationSettings.ConnectionStrings("MyConnectionString1"))
...
End Sub
|
پيكربندی Session State
state management
يكی از مسائل مهم در زمان پياده سازی برنامه های وب است كه می بايست با توجه به
اهميت آن به درستی با ابعاد آن آشنا گرديد . در گذشته ای نه چندان دور ( ده سال پيش
) ، با اين كه برای پياده سازی برنامه های كامپيوتری از معماری
client-server استفاده می گرديد ولی عملا" در معماری
فوق ما دارای يك fat client و يك
fat server می باشيم كه برای ذخيره
state از امكانات موجود در سمت سرويس دهنده و يا سرويس گيرنده استفاده می
شود . با توجه به اين كه در معماری فوق ، يك ارتباط دائم بين سرويس گيرندگان
و سرويس دهنده وجود دارد برای ذخيره و نگهداری state با
مشكل خاصی مواجه نمی شويم .
در برنامه های وب گفتگوی بين يك سرويس گيرنده و يك سرويس دهنده از طريق پروتكل
HTTP انجام می شود و جملگی به خوبی می دانيم كه اين
پروتكل يك پروتكل stateless است و ارتباط با يك سرويس
دهنده از راه دور در زمان مورد نياز ايجاد و در ادامه و پس از سرويس دهی ، غيرفعال
می شود . با اين كه HTTP 1.1 از يك روش
Keep-alive استفاده می نمايد ولی سرويس دهنده نمی تواند
درخواست های ايجاد شده توسط يك سرويس گيرنده را تشخيص دهد .
برای ذخيره و نگهداری
state از گزينه های متعددی استفاده می گردد كه
session يك نمونه در اين زمينه است .شی Session متداولترين محلی است كه می
توان اطلاعات
مربوط به وضعيت برنامه و كاربران را در آن ذخيره و نگهداری نمود . برای پياده سازی
session از يك Hashtable
استفاده می گردد و داده بر اساس تركيب زوج كليد و مقدار ذخيره می
شود .
Session در ASP.NET 2.0
يك مفهوم جديد نيست و متاثر از ماهيت پروتكل
HTTP است (
Stateless ) و قبل از ASP.NET
و حتی ASP كلاسيك وجود داشته است .
داده
Session در چه مكانی ذخيره می گردد ؟
شی
Session يك روش موثر
برای ذخيره و نگهداری وضعيت يك برنامه و يا كاربران آن را ارائه می نمايد. ASP.NET
به همراه سه Storage Provider ارائه شده است :
-
In-Process Session State Store : اطلاعات
session در Cache ( حافظه ) ذخيره می گردد .
-
Out-of-Process Session State Store : اطلاعات
Session در State Server Service ذخيره می گردد ( asp_net_state.exe )
-
Sql Session State Store : اطلاعات session در
بانك اطلاعاتی SQL ذخيره می گردد . برای پيكربندی از aspnet_regsql.exe استفاده می
گردد .
در ASP.NET 2.0 ، يك قابليت
جديد با نام custome به مجموعه فوق اضافه
شده است .
با استفاده از
گزينه فوق ، پياده كنندگان می توانند داده
session را در يك مكان دائم ذخيره نمايند . مثلا"
ASP.NET 2.0 امكان ذخيره داده session را در
برخی بانك
های اطلاعاتی نظير Oracle,DB2 و يا
Sybase ندارد . در صورتی كه بخواهيم داده
session را در يكی از بانك
های اطلاعاتی فوق و يا يك فايل XML
ذخيره نمائيم ، می توان از يك Provider class
سفارشی استفاده نمود .
برای پيكربندی اطلاعات session از عنصر
<sessiononState > در
فايل web.config استفاده می گردد
:
|
<configuration>
<system.web>
<sessionState
mode="Off|InProc|StateServer|SQLServer|Custom" ../>
</system.web>
...
</configuration>
|
در ادامه به بررسی مختصر هر يك از گزينه های فوق خواهيم پرداخت .
In-Process Session State Store
: متداولترين
و در عين حال سريعترين روش پيكربندی session state در ASP.NET 2.0 می باشد
( مقدار mode برابر inproc
در نظر گرفته می شود ) .در اين روش داده Session در cache داخلی
HttpRuntime ذخيره شده و به صورت live قابل دستيابی است . با توجه به اين كه داده
session در حافطه ذخيره می گردد ، به سرعت می توان به آن
دستيابی داشت ( ضرورتی ندارد داده از يك مكان ديگر به درون حافظه انتقال يابد
). داده seesion تا زمان اعتبار
session در حافظه موجود می باشد و پس از time out فضای
اشغال شده آزاد می گردد .
Out-of-Process Session State Store : داده
session در يك process كه به عنوان يك سرويس ويندوز اجراء می گردد ، نگهداری
می شود ( aspnet_state.exe ) .
State Service به صورت پيش فرض اجراء نمی گردد و برای فعال كردن آن می توان
از دستور net start aspnet_sate استفاده نمود . به صورت پيش فرض ، سرويس فوق از
پورت 42424 استفاده می نمايد . در صورت ضرورت می توان با استفاده از كليد ريجستری
زير آن را تغيير داد .
|
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters\Port
|
برای استفاده از روش فوق كافی است كه مقدار Inproc به
StateServer در فايل web.config تغيير داد . همچنين می بايست از خصلت
StateConnectionString به منظور مشخص نمودن IP و شماره پورتی كه Session State
Service بر روی آن اجراء شده است ، استفاده نمود .
|
<configuration>
<system.web>
<sessionState
mode="StateServer"
stateConnectionString="tcpip=127.0.0.1:42424"/>
</system.web>
</configuration>
|
Sql Session State Store
: داده session در يك بانك اطلاعاتی SQL ذخيره می گردد .
|
<configuration>
<system.web>
<sessionState
mode="SQLServer"
sqlConnectionString="data
source= TestSessionServer;
user id=TestWebUser;password=Test"
cookieless="false"
timeout="20"
/>
</system.web>
</configuration>.
|
Custom State Store
:معماری
Sessin state در ASP.NET 2.0 بگونه ای طراحی شده
است كه امكان افزودن Provider به آن وجود دارد ( مشتق
شده از كلاس SessionStateStoreProviderBase ) . در
صورتی كه بخواهيم Provider اختصاصی خود را ايجاد و يا از
يك third-party provider استفاده نمائيم ، می بايست مقدار خصلت
mode را Custome در نظر گرفت
. در چنين مواردی ، لازم است كه custom provider assembly مشتق شده از كلاس
SessionStateStoreProviderBase را مشخص نمود .
|
<configuration>
<system.web>
<sessionState
mode="Custom"
CustomProvider="CustomStateProvider">
<providers>
<add name="CustomStateProvider"
type="CustomStateProviderAssembly,
CustomStateProviderNamespace.CustomStateProviderSateProvider"/>
</providers>
</sesisonState>
</system.web>
</configuration>
|
مثال : كد
زير يك نمونه از پيكربندی
sessionState در فايل
web.config را نشان می دهد :
|
<sessionState
mode="StateServer"
cookieless="false"
timeout="20"
stateConnectionString="tcpip=TestSessionStore:42424"
stateNetworkTimeout="60"
sqlConnectionString=""
/>
|
توضيحات :
-
mode : نوع ذخيره سازی اطلاعات
session را مشخص می نمايد . در اين رابطه از پنج گزينه
Off, InProc, StateServer, SQLServer و Custom استفاده می
گردد . كه مقدار پيش فرض InProc
است .
-
cookieless : مشخص
می نمايد كه آيا از
HTTP cookieless Session Key management حمايت
می گردد .
-
timeout : مدت زمان حيات Session
را مشخص می نمايد . مقدار timeoute
بر اساس زمان درخواست ارزيابی می گردد .
مثلا" در صورتی
كه مقدار timeout بيست دقيقه باشد و در
خواستی در ساعت ده و ده دقيقه
دريافت گردد ، timeout
در ساعت ده و سی دقيقه به اتمام می رسد .
-
stateConnnectionString :از
خصلت فوق به منظور
مشخص نمودن آدرس
TCP/IP و پورت جهت ارتباط يا Windows Service providing state
management استفاده می گردد
( در مواردی كه mode=StateServer در نظر گرفته شود ) .
-
stateNetworkTimeout : مقدار
timeout ( بر حسب ثانيه ) را
در زمان ذخيره state
در يك out-of-process session ( نظير StateServer
) ، مشخص می نمايد .
-
sqlConnectionString : از
خصلت فوق جهت ارتباط با بانك اطلاعاتی SQL Server
برای ذخيره و بازيابی داده
session استفاده می گردد ( در مواردی كه mode=SQLServer
در نظر گرفته شود) .
پيكربندی
Session State با استفاده از
Connection string : كد زير يك نمونه از پيكربندی
Session State با استفاده از
connection string را نشان می دهد :
|
<configuration>
<connectionStrings>
<add name = "TestSessionState"
connectionString =
"data source=TestSessionServer;
user id=TestWebUser;password=test"
/>
</connectionStrings>
<system.web>
<sessionState
mode="SQLServer"
sqlConnectionString="TestSessionState"
cookieless="false"
timeout="20"
/>
</system.web>
</configuration>
|
در بخش سوم به بررسی ساير تنظيمات پيكربندی خواهيم
پرداخت .