PDA

View Full Version : roleManager



hamed_naghdi
سه شنبه 12 فروردین 1393, 23:15 عصر
سلام بنده این تاپیک رو قبلا ایجاد کردم ولی فرصت نکردم بهش سر بزنم چون دم عید بود و کلی سرم شلوغ شده بود ولی با اجازه دوباره می‌نویسم.
بنده به مشکل عجیبی بر خوردم.
اول کد کانفیگ زیر رو ببینید:

<connectionStrings>
<clear/>
<remove name="LocalSqlServer"/>
<add name="LocalSqlServer"
providerName="System.Data.SqlClient"
connectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=aspnetdb"/>
</connectionStrings>

.
.
.

<roleManager defaultProvider="SqlProvider"
enabled="true" >
<providers>
<add
name="SqlProvider"
type="System.Web.Security.SqlRoleProvider"
connectionStringName="LocalSqlServer"
applicationName="/hami-company.ir" />
</providers>
</roleManager>






مشکل اینه که اگه بجای LocalSqlServer چیز دیگه‌ای رو به عنوان کانکشن انتخاب کنم خطا می‌ده و فقط مقدار پیش فرض LocalSqlServer رو قبول می‌کنه

ممنون می‌شم راهنماییم کنید.

یه دوستی هم پرسیده بود که :

در کجا اگر این تغییر را دهید مشکل به وجود می آید؟ در تعریف رشته اتصال یا در تعریف رل؟
والا همین که اسمش رو عوض کنم و چیزه دیگه‌ای بذارم خطا می‌ده. مثلا اسم کانکشن رو بذارم xxx و بعدش اون رو به رل معرفی کنم خطا می‌ده و فقط مقدار LocalSqlServer رو خطا نمی‌ده.

hamed_naghdi
پنج شنبه 14 فروردین 1393, 00:31 صبح
چرا هیچکی جوابمو نمی‌ده؟:گریه:

mRizvandi
پنج شنبه 14 فروردین 1393, 01:23 صبح
LocalSqlServer مقدار پیش فرض نیست، اسم کانکشنی است که شما تعریف کردید.
شما در بخش connectionStrings فقط یک کانکشن رو تعریف کردید که اسمش هست: LocalSqlServer
رول منیجر اسم کانکشن رو اسم شما می خواد که شما هم باید همون یک کانکشن رو بهش بدید. اگر دیتابیس کاربران از دیتابیس اطلاعات سایت جدا باشه شما می تونید از دو کانکشن استفاده کنید و نام کانکشن کابران رو به رول منیجر میدید.

hamed_naghdi
پنج شنبه 14 فروردین 1393, 15:59 عصر
LocalSqlServer مقدار پیش فرض نیست، اسم کانکشنی است که شما تعریف کردید.
شما در بخش connectionStrings فقط یک کانکشن رو تعریف کردید که اسمش هست: LocalSqlServer
رول منیجر اسم کانکشن رو اسم شما می خواد که شما هم باید همون یک کانکشن رو بهش بدید. اگر دیتابیس کاربران از دیتابیس اطلاعات سایت جدا باشه شما می تونید از دو کانکشن استفاده کنید و نام کانکشن کابران رو به رول منیجر میدید.
با تشکر از جواب شما ، من برای ساده شدن کانکشن مربوط به بقیه‌ی دیتابیس‌ها رو ننوشتم اینجا. توی سورس اصلی من دو تو کانکشن دارم که اینجا فقط اینو نوشتم.
منظورم اینه که چرا فقط وقتی اسم کانکشن رو LocalSqlServer انتخاب می‌کنم قبول می‌کنه اگه مثلاً اسمش رو بذارم xxx و همین اسم رو به رول منیجر بدم خطا می‌گیره در حالی که الآن اسم کانکشن رو دادم LocalSqlServer و همین رو به رول منیجر دادم مشکلی پیش نمیاره. و این واقعا واسم جای سوال داره.
راجع به پیش فرض بودنش هم تو یک کتاب معتبر می‌خوندم که این اسم پیش فرض هست برای همین اینو دادم و خطا نگرفت.

mRizvandi
پنج شنبه 14 فروردین 1393, 23:11 عصر
درسته، زمانی پیش فرض هست که شما اسم کانکشن رو ست نکرده باشید و از مقدار تعریف شده در ASP.NET رو استفاده می کنه. شما در کدی که گذاشتید این نام پیش فرض رو حذف کردید و دوباره یک کانکشن با همون نام ساختید.
خب اما موضوع سوال شما:
خطا در زمان کامپایل می گیرید یا در زمان اجرا؟
پیشنهاد میکنم خطایی که می گیرید رو اینجا بذارید که بهتر بتونیم تشخیص بدیم که چه اتفاقی داره می افته. اصولا همه چی منطقی به نظر میاد و اگر شما نام کانکشن دیتابیس رو به رل منیجر بدید همه چی درست خواهد بود.

mRizvandi
جمعه 15 فروردین 1393, 03:24 صبح
سوال شما باعث شد من یک شبیه سازی کنم و موضوع رو پیدا کنم. در مرحله اول مشخص شد که خطا به خاطر حذف کردن کانکشن پیش فرض LocalSqlServer هست.

<clear/>
<remove name="LocalSqlServer"/>

اما سوال اینه که چرا با حذف کردن این کانکشن پیش فرض باید خطا ایجاد بشه. مقداری جستجو کردم و بالاخره در سایت asp.net همین سوال رو پرسیدم.
نتیجه اینه که کانکشن LocalSqlServer که در بخش connectionStrings قرار داره، بصورت پیش فرض برای دسترسی به بانک اس کیو ال سرور اکسپرس تعریف شده. وقتی شما این کانکشن رو حذف می کنید باید جاهایی که از این کانکشن استفاده شده رو هم اصلاح کنید. من فایل machine.config رو بررسی کردم. دقیقا 4 بار از این کانکشن استفاده شده، شما باید در هر 4 قسمت دستورات Clear و Remove رو استفاده کنید.


<connectionStrings>
<add name="LocalSqlServer" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspn etdb.mdf;User Instance=true" providerName="System.Data.SqlClient"/>
</connectionStrings>

<membership>
<providers>
<add name="AspNetSqlMembershipProvider" type="..." connectionStringName="LocalSqlServer" enablePasswordRetrieval="... />
</providers>
</membership>


<profile>
<providers>
<add name="AspNetSqlProfileProvider" connectionStringName="LocalSqlServer" applicationName="... />
</providers>
</profile>


<roleManager>
<providers>
<add name="AspNetSqlRoleProvider" connectionStringName="LocalSqlServer" applicationName="... />
<add name="AspNetWindowsTokenRoleProvider" applicationName... />
</providers>
</roleManager>

hamed_naghdi
چهارشنبه 27 فروردین 1393, 23:27 عصر
سوال شما باعث شد من یک شبیه سازی کنم و موضوع رو پیدا کنم. در مرحله اول مشخص شد که خطا به خاطر حذف کردن کانکشن پیش فرض LocalSqlServer هست.

<clear/>
<remove name="LocalSqlServer"/>

اما سوال اینه که چرا با حذف کردن این کانکشن پیش فرض باید خطا ایجاد بشه. مقداری جستجو کردم و بالاخره در سایت asp.net همین سوال رو پرسیدم.
نتیجه اینه که کانکشن LocalSqlServer که در بخش connectionStrings قرار داره، بصورت پیش فرض برای دسترسی به بانک اس کیو ال سرور اکسپرس تعریف شده. وقتی شما این کانکشن رو حذف می کنید باید جاهایی که از این کانکشن استفاده شده رو هم اصلاح کنید. من فایل machine.config رو بررسی کردم. دقیقا 4 بار از این کانکشن استفاده شده، شما باید در هر 4 قسمت دستورات Clear و Remove رو استفاده کنید.


<connectionStrings>
<add name="LocalSqlServer" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspn etdb.mdf;User Instance=true" providerName="System.Data.SqlClient"/>
</connectionStrings>

<membership>
<providers>
<add name="AspNetSqlMembershipProvider" type="..." connectionStringName="LocalSqlServer" enablePasswordRetrieval="... />
</providers>
</membership>


<profile>
<providers>
<add name="AspNetSqlProfileProvider" connectionStringName="LocalSqlServer" applicationName="... />
</providers>
</profile>


<roleManager>
<providers>
<add name="AspNetSqlRoleProvider" connectionStringName="LocalSqlServer" applicationName="... />
<add name="AspNetWindowsTokenRoleProvider" applicationName... />
</providers>
</roleManager>

واقعا ممنون دوست عزیز