2010年5月18日 星期二

App_Code 的程式編譯時出現「沒有型別或命名空間名稱」

利用加入新類別於App_Code中產生 Linq to SQL (.dbml)類別,並於網頁中產生實體:
appcode InstName = new appcode(); //會出現沒有型別或命名空間名稱
在正常情形下,加入命空間應該可以解決,
Name.Space.appcode InstName = new Name.Space.appcode();
但今天碰到一種特殊情形,就算加入命名空間,一樣出現「沒有型別或命名空間名稱」的錯誤,經查是 ~.csproj定義的關係

<Content Include="App_Code\imgLinkBtn.cs">
<dependentupon>imgLinkBtn.dbml</dependentupon>
</content>

它把 App_Code 資料夾內的物件都當成 Content ,所以不編譯,只要將 Content 改成 Compile
問題就解決了!


放在 App_Code 內的 ~.dbml 產生的程式碼,竟然不能 using System.Data.Linq 及 System.Data.Linq.Express
害我將 App_Code 更名為 AppCode 就好了!! Why? Why? Why?
書上不是都將 ~.dbml 放在 App_Code 中嗎???


========= 完畢 ========

2010年5月15日 星期六

使用者控制項-編譯沒錯誤,但執行不到










自行開發的使用者控制項,在重建方案時,皆無錯誤訊息,之前還可以執行、追踨,可是調整功能後,突然執行不到,Debug 時,Page_Load 不到執行到 控制項內。

處理方式:
將 控項項的 ~.designer.cs 刪除,然後在 ~.ascx 上按右鍵,重新選擇「轉換為WebForm」,VS 即可重新產制 ~.designer.cs

======= 完畢 =========

2010年5月8日 星期六

ASPNETDB 無法連線(Login控制項、MemberShip) 續章,原來是中文Cookie名稱的問題!

前次提到「VS 2008 的「網站專案」與「Web應用程式」專案(新網站,新增專案)」,經將Web應用程式發布到 IIS 上之後,又發生另一怪事,登入控制項(Login)輸入、連線都沒有錯誤訊息,可是卻都無法順利登入。


(1)以 WebForm 開發,利用VS2008內建的網站,在 VS上可以正常執行,可以登入,並且導向指定的網頁。
追蹤 SQL Profiler ,有下面五行執行

exec dbo.aspnet_CheckSchemaVersion @Feature = N'Common', @CompatibleSchemaVersion = N'1'
exec dbo.aspnet_CheckSchemaVersion @Feature = N'Membership', @CompatibleSchemaVersion = N'1'
exec dbo.aspnet_Membership_GetPasswordWithFormat @ApplicationName = N'UserLogin', @UserName = N'xxxxxxx',
@UpdateLastLoginActivityDate = 1, @CurrentTimeUtc = '05 7 2010 2:45:09:890PM'
exec sp_reset_connection
exec aspnet_UsersInRoles_GetRolesForUser @ApplicationName = N'UserLogin', @UserName = N'xxxxxxx'

可是將WebServer改用IIS 就會跟下面描述的情況一樣,登入失效,但沒有錯誤訊息。

(2)以 網站模式開發,網站在 XP+IIS 5,或 2003+IIS 6,登入都沒有錯誤訊息,追蹤 SQL Profiler
只有這一行:
exec dbo.aspnet_Membership_GetPasswordWithFormat @ApplicationName = N'UserLogin', @UserName = N'xxxxxxx',
@UpdateLastLoginActivityDate = 1, @CurrentTimeUtc = '05 7 2010 2:41:15:093PM'

所以這不是連線的問題,而且 在 XP+IIS5 與 2003 + IIS6 皆有相同問題,


感謝 SteveT 大大的幫忙 ,最後找到是 Web.Config 中設定問題,只要將下列 name="首頁" 取消就恢復正常了 (Cookie名稱不能用中文啦!)

<authentication mode="Forms">

<forms name="首頁" loginUrl="Default.aspx" cookieless="UseCookies"/>
</authentication>

2010年5月2日 星期日

VS 2008 的「網站專案」與「Web應用程式」專案(新網站,新增專案)


VS 2008 的「網站專案」與「Web應用程式」專案
( C# 為語言基礎)
會去研究這個問題,起因於:
在公司開發的「網站專案」測試皆正常,可是複製到另一台開發環境後,編譯無誤,但執行 Lotin控制項,不會出現錯誤,認證過程應該有成功,因為追蹤流程的確有 LoggingIn-->LoggedIn ,而不是LoggingIn--> LoginError,可是查詢Page.User.Identity.IsAuthenticated 卻得到 「false」,表示說驗證過程正常,但驗證資料卻沒有載入 Identity 中。
後來將「網站專案」轉換成「Web應用程式專案」(轉換過程如下述),再執行專案,一切都正常了!
完整文件,請參考我的 Google Docs -- VS 2008 的「網站專案」與「Web應用程式」專案


==== 完 畢 ====

2010年5月1日 星期六

ASPNETDB無法連線(Login控制項、MemberShip)

無法建立與資料庫的連接。
如果尚未建立 SQL Server 資料庫,請結束網站管理工具,然後使用 aspnet_regsql 命令列公用程式建立並設定資料庫,再回到這項工具以設定提供者。

資料庫是利用 ASPNET_REGSQL.EXE 建立,名稱可以自行指定!

明明連線字串設定沒問題「
<add name="'LoginUser'" connectionstring="'workstation" id="MOJ_GARY;packet" size="4096;user" id="帳號;data" source="伺服器;persist" info="True;initial" catalog="資料庫;password="密碼'">

<roleManager enabled="'true'" cacherolesincookie="'true'" cookiename="'.ASPROLES'" defaultprovider="'rProvider'">
<providers>
<add name="'rProvider'" connectionstringname="'LoginUser'......" />
</providers>
</roleManager>

<membership defaultprovider="mProvider">
<providers>
<add connectionStringName="LoginUser" Name="
mProvider" ....../>
</providers>
</membership>


Trace 程式及 Sql Server,Login時的確也有連線到指定的DB,可是驗證卻都不成功,利用VS2008的「ASP.NET組態」工具測試,安全性應用程式頁的測試都成功,但提供者-->(進階)頁的「測試」卻都不成功(如最上面的訊息)!

經 Google 後,在「http://www.dotblogs.com.tw/johnny/archive/2010/01/20/13131.aspx」找到了答案,原來在 Web.config 中一定加上 LocalSqlServer 這個連線字串,這個字是固定的,不能改它!
也就是說要在 Web.Config 中加入:
<remove name="LocalSqlServer" />
<!--為避免與 Machine.Config 的設定沖突,所以要加 remove 這一行-->
<add name="LocalSqlServer" connectionstring="Data Source=伺服器;Initial Catalog=資料庫;User ID=帳號;Password=密碼" providername="System.Data.SqlClient" />

===== 完 畢 =====