IIS7 و آپلود فايل‌هاي حجيم


با استفاده از IIS6 ويندوز سرور 2003 و تنظيمات ويژه در web.config يك برنامه ASP.Net، حداكثر مي‌توان يك فايل 2 گيگابايتي را آپلود كرد (جهت مصارف اينترانتي). براي مثال:
<system.web>
<httpRuntime maxRequestLength="2097151" executionTimeout="900" />
</system.web>
2097151 كيلوبايت حداكثر مقداري است كه اينجا مي‌توان تنظيم كرد و بيش از اين با خطاي زير متوقف خواهيم شد:

Parser Error Message: The value for the property 'maxRequestLength' is not valid. The error is: The value must be inside the range 0-2097151.

اين محدوديت در IIS7 برطرف شده است كه تنظيمات آن در وب كانفيگ به صورت زير مي‌باشد:
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="4294967295" />
</requestFiltering>
</security>
</system.webServer>

در اينجا maxAllowedContentLength بر حسب بايت است و نه همانند maxRequestLength برحسب كيلوبايت (كه در IIS7 هيچ تاثيري نخواهد داشت).
البته تنظيمات فوق در اينجا به پايان نمي‌رسند زيرا بر اساس تنظيمات امنيتي IIS7، كاربران مجاز به اعمال تنظيمات شخصي خود نيستند و خطاي زير را دريافت خواهند كرد:
The requested page cannot be accessed because the related configuration data for the page is invalid
و يا

The request filtering module is configured to deny a request that exceeds the request content length

براي اين منظور بايد دستور زير را با دسترسي مديريتي در خط فرمان اجرا نمود:
براي يك برنامه خاص:
%windir%\system32\inetsrv\appcmd set config "Default Web Site/<your app>" -section:requestFiltering -requestLimits.maxAllowedContentLength:4294967295

و يا براي تمام برنامه‌ها:
%windir%\system32\inetsrv\appcmd set config -section:requestFiltering -requestLimits.maxAllowedContentLength:4294967295

و يا فايل زير را يافته:
%windir%\System32\inetsrv\config\applicationHost.config
در آن سطر زير را
<section name="requestFiltering" overrideModeDefault="Deny" />
ويرايش كرده و مقدار overrideModeDefault آن‌را به Allow‌ تنظيم كرد:
<section name="requestFiltering" overrideModeDefault="Allow" />
مقدار پيش فرض maxRequestLength در IIS6 مساوي 4 مگابايت و مقدار پيش فرض maxAllowedContentLength در IIS7 مساوي 28.6MB‌ مي‌باشد. maxAllowedContentLength از نوع UINT32 است يعني حداكثر تا 4 گيگابايت را توسط آن مي‌توان مقدار دهي كرد. maxRequestLength از نوع Int32 است با حداكثر مقدار قابل تنظيم 2 گيگابايت.



سيلورلايت 4 و پشتيباني رسمي از RTL


بالاخره پشتيباني رسمي از زبان‌هاي راست به چپ به سيلور لايت 4 كه اخيرا نسخه‌ي بتاي آن منتشر شده، اضافه گرديد. براي استفاده از آن نياز به VS2010 Beta2 به همراه ابزارهاي جديد آن و يا نسخه‌‌ي جديد Microsoft Expression Blend for .NET 4 Preview مي‌باشد.


تا پيش از اين، پروژه سورس بازي به نام SilverlightRTL يك سري كنترل را با پشتيباني از RTL ارائه داده بود كه اكنون تيم آن اعلام كرده است كه با آمدن سيلورلايت 4 ديگر اين پروژه را ادامه نخواهند داد.

يافتن تداخلات Collations در SQL Server


اگر ديتابيس خود را در طي چند سال از يك نگارش به نگارشي ديگر يا از يك سرور به سروري ديگر منتقل كرده باشيد، به احتمال زياد به مشكلات Collations هم برخورده‌ايد. يكي از فيلدها Arabic_CI_AS است (بجا مانده از دوران قبل از SQL Server 2008) در يك جدول و در جدولي ديگر فيلدي تازه‌اي با Collation از نوع Persian_100_CI_AS تعريف شده است. Collations نحوه ذخيره سازي و مقايسه رشته‌ها را كنترل مي‌كنند. زمانيكه يك جدول جديد را در SQL Server ايجاد مي‌كنيم، اگر Collation فيلدها به صورت صريح ذكر نگردند، بر مبناي همان Collation پيش فرض ديتابيس تعريف خواهند شد.
بنابراين اگر پس از استفاده از SQL Server 2008 و تنظيم Collation پيش فرض ديتابيس به Persian_100_CI_AS ، به اين موارد دقت نكنيم، دير يا زود دچار مشكل خواهيم شد.
عمليات مرتب سازي با وجود تداخلات Collations مشكل ساز نمي‌شود (خطايي دريافت نمي‌كنيد)، اما ممكن است الزاما صحيح عمل نكند. مشكل از آنجايي آغاز مي‌شود كه قصد داشته باشيم داده‌ها را مقايسه كنيم يا join ايي بين اين دو جدول با فيلدهاي ناهمگون از لحاظ Collation ايجاد نمائيم. در اين حالت حتما خطاهاي تداخل Collation را دريافت كرده و كوئري‌هاي ما اجرا نخواهند شد.
Cannot resolve collation conflict for equal to operation

يك راه حل اين است كه در حين join به صورت صريح collation هر دو فيلد ذكر شده را به صورت يكسان ذكر كنيم كه بيشتر يك مرهم موقتي است تا راه حل اصولي. براي مثال:
SELECT ID
FROM ItemsTable
INNER JOIN AccountsTable
WHERE ItemsTable.Collation1Col COLLATE DATABASE_DEFAULT
= AccountsTable.Collation2Col COLLATE DATABASE_DEFAULT
راه ديگر اين است كه مشخص كنيم كه Collation كدام فيلدها در ديتابيس با Collation پيش فرض ديتابيس تطابق ندارند. سپس بر اساس اين ليست شروع به تغيير Collations نمائيم.
اسكريپت زير تمام فيلدهاي ناهمگون از لحاظ Collation ديتابيس جاري را براي شما ليست خواهد كرد:
DECLARE @defaultCollation NVARCHAR(1000)
SET @defaultCollation = CAST(
DATABASEPROPERTYEX(DB_NAME(), 'Collation') AS NVARCHAR(1000)
)

SELECT C.Table_Name,
Column_Name,
Collation_Name,
@defaultCollation DefaultCollation
FROM Information_Schema.Columns C
INNER JOIN Information_Schema.Tables T
ON C.Table_Name = T.Table_Name
WHERE T.Table_Type = 'Base Table'
AND RTRIM(LTRIM(Collation_Name)) <> RTRIM(LTRIM(@defaultCollation))
AND COLUMNPROPERTY(OBJECT_ID(C.Table_Name), Column_Name, 'IsComputed') = 0
ORDER BY
C.Table_Name,
C.Column_Name
براي مثال جهت تغيير Collation فيلد Serial از جدول tblArchive از نوع nvarchar با طول 200 به Persian_100_CI_AS مي‌توان از دستور T-SQL زير استفاده كرد:
ALTER TABLE [tblArchive] ALTER COLUMN [Serial] nvarchar(200) COLLATE Persian_100_CI_AS not null

SharePoint2010 و قابليت FileStream


اگر خاطرتان باشد يك مقاله سه قسمتي در مورد قابليت جديد FileStream مربوط به SQL Server 2008 چندي قبل در اين سايت منتشر شد (+ و + و +).
خبر خوش اين است كه اين قابليت تحت عنوان Remote Blob Storage يا RBS در شيرپوينت 2010 (كه نسخه‌ي بتاي آن يكي دو روزي است كه به مشتركين MSDN ارائه شده) قابل استفاده مي‌باشد و به اين صورت مي‌توان به سادگي از مزاياي اين فناوري جديد بهره‌مند شد.
مستندات رسمي فعال سازي اين قابليت در شيرپوينت 2010:


اين قابليت Remote Blob Storage در شيرپوينت 2007 هم قابل پياده سازي است اما پشتيباني رسمي نمي‌شود:


پ.ن.
ارزش اين چند سطري كه مطالعه فرموديد حدود يك ميليون و 200 هزار تومان مطابق قيمتي است كه از يكي از شركت‌هاي داخلي مدعي اختراع اين فناوري براي شيرپوينت 2007، دريافت شده است!

JSLint.VS


JSLint.VS افزونه‌اي است رايگان براي VS.Net2005/2008 جهت بررسي ساده‌تر مشكلات دستوري در فايل‌هاي JavaScript يك پروژه.


اكنون بجاي اينكه در مرورگر به دنبال خطاهاي گزارش شده بگرديم، مي‌توان پيش از بررسي نهايي آن‌ها، در VS.Net‌ مشكلات ممكن را يافته و برطرف ساخت.
JSLint.VS به منوي كليك راست بر روي يك فايل js اضافه مي‌شود و يا در حالت انتخاب قطعه‌اي كد و سپس كليك راست و بررسي مشكلات موجود و يا در حالت يكپارچه با امكانات build پروژه قابل استفاده است (براي يكپارچه سازي با Build بايد به منوي Tools قسمت JSLint.VS options مراجعه كرد و سپس گزينه build را درصفحه ظاهر شده تيك زد).



پس از دريافت آن، محتويات پوشه bin آن‌را در مسير زير كپي نمائيد:
%My Documents%/Visual Studio 2008/Addins
Or
%My Documents%/Visual Studio 2005/Addins