So Tired !_! 逆水行舟, 不进则退!

27Jan/13

Calling User Defined Database Function From LINQ

Posted by Nick Xu

Entity Framework 4.0 allows you to call a database function both in an esql query and linq to entities. However database function can only return scalar types. Future version would support table valued functions. To use a database function in a query, you have to perform the following steps.

1. Import the function in the store model.

2. To use the function in esql query you must specify the fully qualified namespace of the store model.

3. To make that function available in a linq query, you must define the function with EdmFunction attribute.

To get started we will create a function in the database that returns average product price within that category.

image

Create a new model and import the products table and the above function. Figure below shows our category entity.

image

When you import either a database function or a stored procedure, EF defines the defination of the function using Function element. For database functions, IsComposable is set to true and for stored procedure IsComposable is set to false.

Code below shows the function definition.

image

We can write an esql statement that returns all the products which have a unit price greater then the average price within that category.

image

To use the function in a linq query, we need to define a static method which basically acts as a stub for to call our above function on the store layer. To map the stub method to our function in the store layer, we will use EdmFunction attribute whose first parameter defines the namespace the function resides in and the second parameter is the name of the function.  Code below shows the stub method

image .

Notice the above method throws NotSupportedException because when we call this method in a query, it gets translate to actual call to the store function defined on the SSDL layer. As a result you would never get NotSupportedException thrown at runtime.

Code below shows how to use the above method in a query to get the same result which our esql query gave.

image

29Nov/12

sql 2008 清除日志脚本

Posted by Nick Xu

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
use master
go
 
ALTER DATABASE [edupress.news] SET RECOVERY SIMPLE WITH NO_WAIT
 
use [edupress.news]
go
select name from sys.database_files
where type_desc = 'log'
 
DBCC SHRINKFILE([shedunews_log], 1)
 
USE [master]
GO
ALTER DATABASE [edupress.news] SET RECOVERY FULL WITH NO_WAIT
Tagged as: , , , No Comments
23Oct/12

用开源 ASP.NET MVC 程序 Bonobo Git Server 搭建 Git 服务器

Posted by Nick Xu

现在不用Git,都不好意思说自己是程序员。

当你想用Git,而源代码服务器是Windows系统时,你将面临一个问题:如何在Windows上搭建Git服务器?

看看这篇文章(Setting up a Msysgit Server with copSSH on Windows)中的配置步骤,你会忘而却步吗?你会感叹“Linux世界的精彩,Windows世界的无奈”?

但程序员的天性是解决问题并以此为乐。不管生活在哪个世界,解决问题才是王道。于是,有程序员解决了这个问题,用ASP.NET MVC写了一个开源的Git服务器程序——Bonobo Git Server

Bonobo Git Server基于.NET Framework 4.0+ASP.NET MVC 3开发,数据库用的是SQLite,Git部分用的是GitSharp - Git for .NET and Mono

运行Bonobo Git Server,只需要IIS+WebDAV(IIS 7.5自带WebDAV, IIS 7.0需要下载安装)。

下面简单分享一下安装配置步骤,该步骤经过实践检验,我们已经成功部署。

第一部分 Bonobo Git Server站点的安装与配置

1. 下载Bonobo Git Server并解压

下载地址:http://www.chodounsky.net/bonobo-git-server/

如果想看源代码,请在这里下载:https://github.com/jakubgarfield/Bonobo-Git-Server

2. 配置一个IIS站点(比如:git.cnblogs.com),指向Bonobo Git Server所在文件夹。

a) 应用程序池要以.NET Framework 4.0运行。

b) 要安装ASP.NET MVC3。

c) 如果服务器用的是X64的Windows,需要下载64位版本的System.Data.SQLite至bin文件夹替换32位版本的。

3. 通过浏览器访问上一步配置的站点,如下图:

4. 输入默认用户名admin与密码admin,进入下图页面:

5. 点击“Global Settings”,设置一下代码库的根目录,并设置好该目录的文件系统权限(需要有写权限):

6. 点击“Respositories” 》“Create new repository”,创建新的代码库:

7. 创建好之后,点击代码库的名称,就能查看该代码库的信息,比如最重要的信息——Git Repository Location。

8. 安装/配置WebDAV

安装

1) 如果是IIS 7.5(Windows 7, Windows Server 2008 R2),WebDAV是自带的,只要添加该组件即可。具体配置方法参见 Installing WebDAV on IIS 7.5

2) 如果是IIS 7.0,需要另外下载安装,请参见 Installing WebDAV on IIS 7.0 。

配置

添加一条Authoring Rule:

到此,Git 服务器站点的基本配置就完成了。

第二部分 Git客户端简要操作步骤

现在可以通过Git客户端提交代码了,这里用的是TortoiseGit。

1. 安装TortoiseGit,下载地址:http://code.google.com/p/tortoisegit/(需要先安装msysgit),VS2010插件可以使用Git Source Control Provider

2. 在将要放置代码的文件夹点击右键选择"Git Clone",在Url中输入代码库的地址,确定后输入默认用户名与密码,然后就开始Clone...出现如下画面表示Clone成功。

3. 向这个代码库文件夹添加代码文件,然后通过TortoiseGit的菜单[Git Commint -> "master"...”]提交代码(这个提交只是向本地的代码库提交,并没有提交至服务器,这也是Git与SVN的主要区别之一)。

4. 通过TortoiseGit > Push 提交至Git服务器。

第三部分  Git服务器的其他操作

  • 修改管理员密码,通过左侧的 "Users"链接进入用户管理界面进行修改。
  • 添加新用户并授权,管理员无法直创建帐户,需要通过注册页面先注册一个帐户(登录页面右上角有注册链接),然后在用户管理界面将该用户加入Administrator角色。
  • 如果遇到问题,可以查看App_Data中的错误日志文件Bonobo.Git.Server.Errors.log。
  • 由于是开源程序,有什么不合你意的地方,直接可以修改源代码。

部署过程中遇到的问题:

clone的时候总是提示授权失败,把代码下回来折腾了N久后才找到原因,IIS的授权管理设置,除了Anonymous Authentication允许,其它全部关闭即可,官方也没提到这个问题:(

Filed under: 其它, 点NET 2 Comments
23Aug/11

ASP.NET 4.0 安裝在 IIS6 最常遇到的四個問題

Posted by Nick Xu

昨天同事將一個 ASP.NET 4.0 的網站安裝到客戶的 IIS6 主機上 (測試環境),結果過程非常不順利,他們曾經一度覺得客戶的主機不知道經過幾隻手蹂躪過了(因為有好多人在共用 Administrator 帳號)進而產生排斥安裝在客戶主機以及 “為什麼我們要用 ASP.NET 4” 的感覺,不過在一群人的努力之下最後還是克服了困難,我特別因此寫下筆記,相信這些問題有其他人也可能會遇到。

要執行 ASP.NET 4.0 網站必須先安裝 Microsoft .NET Framework 4

安裝前必須先確定你的作業系統版本是在支援的範圍內:

  • Windows XP SP3
  • Windows Server 2003 SP2
  • Windows Vista SP1 (含) 以後版本
  • Windows Server 2008 (伺服器核心角色不支援)
  • Windows 7
  • Windows Server 2008 R2 (伺服器核心角色不支援)

常見問題1:設定網站站台ASP.NET 頁籤時找不到 ASP.NET 4.0 的選項

設定網站站台的 ASP.NET 頁籤時找不到 ASP.NET 4.0 的選項

注意:如果你只有安裝 .NET Framework Client Profile是不支援 ASP.NET 的,必須下載 Microsoft .NET Framework 4 (獨立安裝程式) 來安裝才會完整。

.NET Framework Client Profile

正常來說,只要 Windows Server 2003 已經先安裝好 IIS 再安裝 Microsoft .NET Framework 4 就可以在 IIS 6.0 網站站台ASP.NET 頁籤找到 ASP.NET 4.0 的選項:

只要 Windows Server 2003 已經先安裝好 IIS 再安裝 Microsoft .NET Framework 4 就可以在 IIS 6.0 網站站台的 ASP.NET 頁籤找到 ASP.NET 4.0 的選項

常見問題2:安裝好 .NET 4 後還是找不到設定網站站台ASP.NET 頁籤的 ASP.NET 4.0 的選項

這問題通常出在先安裝 Microsoft .NET Framework 4 才安裝 IIS6,這時必須輸入以下指令將 ASP.NET 4.0 註冊進 IIS6 即可:

C:WINDOWSMicrosoft.NETFrameworkv4.0.30319aspnet_regiis.exe -ir -enable

C:WINDOWSMicrosoft.NETFrameworkv4.0.30319aspnet_regiis.exe -ir -enable

常見問題3:安裝好 .NET 4 也設定好網站站台的 ASP.NET 4.0 的選項依然無法執行網站

這裡的「無法執行網站」其實所有執行的頁面都會出現 找不到這個頁面 (HTTP 錯誤 404 - 找不到檔案或目錄) 的回應,不管你怎麼設定目錄安全性或任何執行權限都無法執行任何 ASP.NET 程式,而且可能只有靜態頁面可以讀取而已,像是如下圖示這麼一般性的錯誤訊息真的很容易讓 IT 人員不知如何是好:

找不到這個頁面 (HTTP 錯誤 404 - 找不到檔案或目錄)

如果你因為安裝 ASP.NET MVC 而有設定「萬用字元應用程式對應」的話,則會發現網站所有頁面包括靜態檔案讀去都會回應 找不到這個頁面 的錯誤!

應用程式設定 - 萬用字元應用程式對應

此問題發生的原因是 IIS6 阻擋了 c:windowsmicrosoft.netframeworkv4.0.30319aspnet_isapi.dll 程式的執行,由於所有會被導向到此 ISAPI Handler 的要求全部都會失敗,所以才會導致你所有 HTTP 要求都會得到 HTTP 404 Not Found 的結果。

解決方式很簡單,只要到 [網頁服務延伸] 的地方將 ASP.NET v4.0.30319 設定 [允許] 即可,如下圖示:

到 [網頁服務延伸] 的地方將 ASP.NET v4.0.30319 設定 [允許] 即可

常見問題4:ASP.NET 4.0 的網站站台已經設定好也可以正常執行了,但執行一段時間會自己掛掉!

如果你在同一個應用程式集區設定了兩個不同版本的 ASP.NET 就會造成這個問題,例如你原本有個 ASP.NET 2.0 的站台,並且設定的應用程式集區為 DefaultAppPool,然而你之後又新增了一個 ASP.NET 4.0 的站台,而預設的應用程式集區也是在 DefaultAppPool 的話就會發生衝突了,這時就會看是哪個站台先被執行起來,先跑起來的那個站台才會搶到所有權,後面執行的那個就會發生 Server Application Unavailable伺服器應用程式無法使用 的錯誤:

伺服器應用程式無法使用

解決的方法有二:

  • 將共用應用程式集區的 網站站台 網站應用程式(虛擬目錄) 都設定到 ASP.NET v4.0.30319
  • 區分兩個不同的應用程式集區

常見問題5:在站点属性里找不到asp.net选项

到服务器上运行:cscript %SYSTEMDRIVE%inetpubadminscriptsadsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 1

如果还不行再运行这个:cscript %SYSTEMDRIVE%inetpubadminscriptsadsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 0

还不行再运行:%SYSTEMROOT%Microsoft.NETFrameworkv1.1.4322aspnet_regiis.exe -i

最后还不行就没办法咯。。。。

Filed under: 点NET No Comments
1Jul/11

sql server 2005结束sleeping的进程语句

Posted by Nick Xu

SET NOCOUNT ON;
DECLARE @host VARCHAR(50), @login NVARCHAR(128);
SET @host = 'dawoo'; --客户端名称,NULL to kill sessions from all hosts.
SET @login = 'tscn'; --登录名
DECLARE @cmd NVARCHAR(255);
DECLARE @possition INT, @total INT, @selSpid SMALLINT;
DECLARE @spidInfo TABLE
(
[id] INT IDENTITY(1,1),
spid SMALLINT,
loginame NVARCHAR(128)
);
INSERT @spidInfo(spid, loginame)
SELECT session_id, login_name
FROM sys.dm_exec_sessions
WHERE is_user_process = 1 AND [status] = 'sleeping' AND
login_name = @login AND [host_name] = COALESCE(@host, [host_name]);
SELECT @total = @@IDENTITY, @selSpid = 0, @possition = 0;
WHILE @possition < @total BEGIN SELECT TOP 1 @selSpid = spid, @possition = [id] FROM @spidInfo WHERE [ID] > @possition
SET @cmd = N'KILL ' + CAST(@selSpid AS NVARCHAR(10));
EXEC sp_executesql @cmd;
PRINT 'SessionId = ' + CAST(@selSpid AS NVARCHAR(10)) + '[' + @login +
'] killed by ' + system_user + ' at ' + CAST(GETDATE() AS VARCHAR(50));
END;
IF (@total = 0)
PRINT 'No sessions owned by user ' + '[' + @login + ']';

Tagged as: , , No Comments
12May/11

通过两个点的经纬度计算距离

Posted by Nick Xu

原理:

地球赤道上环绕地球一周走一圈共40075.04公里,而@一圈分成360°,而每1°(度)有60,每一度一秒在赤道上的长度计算如下:

40075.04km/360°=111.31955km

111.31955km/60=1.8553258km=1855.3m

而每一分又有60秒,每一秒就代表1855.3m/60=30.92m

任意两点距离计算公式为

d=111.12cos{1/[sinΦAsinΦB十cosΦAcosΦBcos(λB—λA)]}

其中A点经度,纬度分别为λA和ΦA,B点的经度、纬度分别为λB和ΦB,d为距离。

private const double EARTH_RADIUS = 6378.137;
private static double rad(double d)
{
return d * Math.PI / 180.0;
}

public static double GetDistance(double lat1, double lng1, double lat2, double lng2)
{
double radLat1 = rad(lat1);
double radLat2 = rad(lat2);
double a = radLat1 - radLat2;
double b = rad(lng1) - rad(lng2);
double s = 2 * Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(a/2),2) +
Math.Cos(radLat1)*Math.Cos(radLat2)*Math.Pow(Math.Sin(b/2),2)));
s = s * EARTH_RADIUS;
s = Math.Round(s * 10000) / 10000;
return s;
}

 
c#代码
private const double EARTH_RADIUS = 6378.137; //地球半径
private static double rad(double d)
{
return d * Math.PI / 180.0;
}

public static double GetDistance(double lat1, double lng1, double lat2, double lng2)
{
double radLat1 = rad(lat1);
double radLat2 = rad(lat2);
double a = radLat1 - radLat2;
double b = rad(lng1) - rad(lng2);
double s = 2 * Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(a/2),2) +
Math.Cos(radLat1)*Math.Cos(radLat2)*Math.Pow(Math.Sin(b/2),2)));
s = s * EARTH_RADIUS;
s = Math.Round(s * 10000) / 10000;
return s;
}

//.Split(new string[] { "@@" }, StringSplitOptions.RemoveEmptyEntries)

21Apr/11

让C#的桌面程序支持WINDOWS 7的UAC

Posted by Nick Xu

<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<!-- UAC Manifest Options
If you want to change the Windows User Account Control level replace the
requestedExecutionLevel node with one of the following.

<requestedExecutionLevel  level="asInvoker" uiAccess="false" />
<requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel  level="highestAvailable" uiAccess="false" />

Specifying requestedExecutionLevel node will disable file and registry virtualization.
If you want to utilize File and Registry Virtualization for backward
compatibility then delete the requestedExecutionLevel node.
-->
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>

<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- A list of all Windows versions that this application is designed to work with. Windows will automatically select the most compatible environment.-->

<!-- If your application is designed to work with Windows 7, uncomment the following supportedOS node-->
<!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>-->

</application>
</compatibility>

<!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->
<!-- <dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>-->

</asmv1:assembly>

 

添加app.manifest,在文件里加入以上内容即可

Tagged as: , No Comments
14Mar/11

配置 IIS 7 显示详细错误信息

Posted by Nick Xu

如果你在 IIS 7 中只看到诸如 HTTP Error 500 - Internal Server Error (500 - 内部服务器错误) 的简单错误信息,那么可以通过如下步骤配置 IIS7 以输出详细错误信息。

通过 IIS 配置

  1. 按住 WIN + R 打开命令行输入 inetmgr 打开 IIS 管理
  2. 左边目录选择目标站点,在右边 IIS 块中双击 Error Pages
  3. 在 Error Pages 中右边的 Actions,选择 Edit Feature Settings
  4. 在 Error Responses 中,选择 Detailed errors,单机 OK 完成配置。

iis7-detailed-errors

通过命令行

启用详细错误:

%windir%\system32\inetsrv\appcmd.exe set config "Default Web Site/yourapp" /section:httpErrors /errorMode:Detailed

禁用详细错误:

%windir%\system32\inetsrv\appcmd.exe set config "Default Web Site/yourapp" /section:httpErrors /errorMode:Custom

通过 web.config 配置

其实,上面在两种配置,最终都会反应到对应的 web.config 中。因此,我们可以直接编辑 web.config。特别是对于买的虚拟主机(Shared Web Hosting),没有权限更改IIS。打开网站目录,找到 web.config 文件(如果没有,就建立一个 txt 文件存为 web.config),找到 system.webServer 配置节,添加配置 <httpErrors errorMode="DetailedLocalOnly" />

[code:xml]

<configuration>
<system.webServer>
<httpErrors errorMode="DetailedLocalOnly" />
</system.webServer>
</configuration>

[/code]

注意

  • 此参数选项可以应用到网站或子目录或虚拟目录。
  • 此参数选项对所有 IIS 应用程序有效,包括 ASP, APS.NET, PHP 等。

如果是 ASP.NET 程序,可能还需要配置  <customErrors mode=”Off” />
[code:xml]

<system.web>
<customErrors mode=”Off” />
</system.web>

[/code]

此外,如果是 ASP 程序,还可以配置 sendErrorsToBrowser 选项:

通过 IIS 配置

  1. 按住 WIN + R 打开命令行输入 inetmgr 打开 IIS 管理
  2. 左边目录选择目标站点,在右边 IIS 块中双击 ASP
  3. 在 ASP 页中展开 Debugging Properties 节点
  4. 找到 Send Errors To Browser ,选择 true
  5. 右边 Actions 中,单击 Apply

iis7-detailed-errors-asp

通过命令行

启用:

%windir%\system32\inetsrv\appcmd set config -section:asp -scriptErrorSentToBrowser:true

禁用:

%windir%\system32\inetsrv\appcmd set config -section:asp -scriptErrorSentToBrowser:false

注意上面参数中 config 后面不能指定站点目录

25Jan/11

解决.NET 带小数的数字字符串转换decimal失败报错

Posted by Nick Xu

今天一位同事发现一个奇怪的现象,一个文本框,用户输入数字,提交后报错,大概内容是说格式不正确,转换失败,错误那一行的代码是:

decimal dPrice = Convert.ToDecimal(strPrice);

这行代码没什么特别的,只要变量的值是合法的数字应该是没问题的。建了一个测试页面,直接把取到的值打印出来,结果字符串打印出来的结果也是对的。

这就纳闷了,字符串的值和格式都是合法的,怎么转换的时候就报错了呢。另一个更纳闷的是程序在本地调试是没问题的,放到服务器上就变成这样了。。。

我想问题应该是出在服务器的配置上了,看了一下IIS上的站点属性,再点ASP.NET标签再看看配置文件的各个属性了,突然af-ZA惊现在我眼前,是Culture和UI Culture的值都是设置为af-ZA了。我想问题应该就出在这里了,我把这两个值设为zh-CN,再去看看刚才报错的页面,恢复正常了。呵呵

这里顺便解释一下Culture是个什么东东。

Culture表示当前区域性信息。 此信息确定了日期、时间、货币和数字的默认格式,文本的排序顺序,字符串比较方式以及大小写。 通过此属性进行的设置不是语言设置。 此属性仅定义与地理区域的标准设置相关的数据。

要查看每个国家的日期、时间、货币和数字的默认格式可以在控制面板中的“地区和语言”里看到。

10Dec/10

以远程桌面访问Windows Azure虚拟机(转+译)

Posted by Nick Xu

本周Windows Azure Team发布了新的开发门户和1.3版本的SDK。新版SDK中有许多非常酷的特性,其中之一便是以远程桌面访问正在运行的Windows Azure虚拟机,该特性也是我之前非常期待的的一个新功能。

配置远程桌面访问

为Windows Azure服务启用远程桌面访问是非常简单的。首先,使用Visual Studio创建一个新的Windows Azure项目,在这个例子中我仅创建一个常规的没有任何修改的MVC2 web role。 然后在解决方案窗口右击该Windows Azure项目选择"Publish"。

选中"Deploy your Windows Azure project to Windows Azure"单选按钮,提供证书,部署服务/槽、存储和标签等信息。

为了使用一键部署的特性,您必须将Management API证书上传至到您的Windows Azure帐户内,并在计算机上安装该证书。
您会在对话框下方发现有一个"Configure Remote Desktop connections"的连接。您需要通过该链接来开启远程桌面访问功能。

点击这该连接,我们将配置远程桌面访问的权限信息。配置过程有4个步骤:

  • 证书:我们需要创建或选择一个证书文件来加密访问凭证。在这个例子中我将证书文件用于我的Management API。
  • 用户名:访问虚拟机的远程桌面用户名。
  • 密码:登录密码。
  • 有效期限:登录凭证默认在1个月后过期,但我们可以修改该默认值。

在这之后我们单击OK按钮,返回发布对话

下一步访问新版Windows Azure门户,找到托管服务清单。创建一个新的托管服务并上传证书文件到该服务。用于访问Windows Azure虚拟机的用户名和密码必须在本地机器上加密,并在Windows Azure端以相同的证书文件进行解密。这就是我们为什么需要上传证书文件到Windows Azure上的原因了。
在左侧面板的"Hosted Services, Storage Accounts & CDN"中,创建一项新的托管服务,命名为"SDK13,然后点击"Certificates"。然后我们点击"Add Certificates"按钮。

选择本地证书文件和密码,将其安装至Windows Azure服务。

最后一步会返回到Visual Studio,点击发布对话框中的OK按钮。然后Visual Studio会将程序包,以及带有远程桌面设置的配置文件上传至Windows Azure。

远程桌面访问Windows Azure虚拟机

完成所有上述步骤后,让我们来回到新版Windows Azure开发门户。选择刚部署至Windows Azure的web role,在工具栏上我们可以看到有一名为"Remote Access"工具区。在该工具区,我们看到Enable复选框已经被勾上了,这意味着该web role已经开启了远程桌面访问功能。

如果想要修改连接凭证,我们可以直接点击Configure按钮,便可以更新用户名、密码、证书和有效期限。

选择web role下的实例节点,我们可以看到,我们可以点击Connect按钮来启动远程桌面访问。

点击该按钮后,我们会下载一个RDP文件被。这是一个远程桌面的配置文件, 可以用来访问我们的Windows Azure虚拟机。我们将其下载到本地,并运行。

输入先前的用户名和密码,点击OK按钮。

此时可能出现证书警告对话框。这是因为我们用来加密的证书并不是由可信赖的提供商签署的。此时选择OK。因为我们清楚知道该证书对我们来说是安全的。

最后,我们成功的以远程桌面访问Windows Azure虚拟机。

快速的浏览Windows Azure虚拟机概况

我们可以浏览一下我们的虚拟机。这里有3个磁盘可供我们使用:C、D、E。

  • C盘: 储存本地资源、诊断信息等。
  • D盘: 包含OS,IIS, .NET Frameworks等文件的系统磁盘。
  • E盘: 存储我们的应用程序代码。

托管了服务的IIS。

Windows Azure虚拟机的IP配置。

总结

在这篇帖子中我讲解了Windows Azure 1.3版本SDK其中的一个新特性-远程桌面访问。我们可以按照每个服务来设置远程桌面访问权限,这样该服务下的每个实例都能被远程桌面访问。该特性让我 们能深入我们实例的虚拟机, 来查看实例内部信息,例如系统事件、IIS日志、系统信息等。

但是我们在修改系统设置时,应注意如下2:

  • 1. 如果某个服务有超过一个的实例,我们就应该确保所有的虚拟机/实例有着相同的系统设置。否则, 由于实例间的不同设置会使负载均衡代理无法正常工作。
  • 2. 当虚拟机中遇到了一些问题,需要被转移至另一个物理计算机时,我们需要对该新机器进行设置。

本文翻译自:http://geekswithblogs.net/shaunxu/archive/2010/12/03/remote-desktop-to-your-azure-virtual-machine.aspx

Windows Azure SDK 1.3 allows customers to connect to their VM’s on the cloud. Below is the step-by-step article to connect to VM’s via remote desktop.

1) Create simple cloud project with ASP.net role

2) In Visual Studio Solution Explorer,  Right click on the Cloud Service Project and Click “Publish”, It will bring up screen similar to below. Now, Click on “Configure Remote Desktop Connections” as highlighted below

3) Select “Enable connections for all roles” checkbox, Create certificate or use existing certificate. This certificate will be used to encrypt the credentials

Note: Certificate created in this step can be found in Current User\personal store.

4) Configure Credentials, Expiry date as shown below

5) ServiceConfiguration.cscfg , ServiceDefinition.csdef looks similar to below. In case you would like to manually configure the settings, below highlighted settings should be configured to enable remote desktop connection.

ServiceConfiguration.cscfg

<?xml version="1.0" encoding="utf-8"?>

<ServiceConfiguration serviceName="RemoteConnect" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="1" osVersion="*">

<Role name="HelloCloud">

<Instances count="1" />

<ConfigurationSettings>

<Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="UseDevelopmentStorage=true" />

<Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.Enabled" value="true" />

<Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountUsername" value="user" />

<Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountEncryptedPassword" value="MIIBnQYJKoZIhvcNAQcDoIIBjjCCAYoCAQAxggFOMIIBSgIBADAyMB4xHDAaBgNVBAMME1dpbmRvd3MgQXp1cmUgVG9vbHMCECY7YujxTkiRToi1balVmo8wDQYJKoZIhvcNAQEBBQAEggEAPqVUbmF5jkFaLnsK1o1VowCgBT/5VYrI7HiVCmKh8OAnqLarN/YVvisqGVmL0XSjBxbk9JfRd/dS3kH9/JYp+G1STWoG4TsWGNRy6LX6OMQao/1t/QbUtaIreMAflYVjrF+AiUMPsLWwABphx9x48hNX970EXIylmINfpCLXpUtSCatoafS2Z260tS9ngszvjj+VD98Qn1GvRi6FwVQW8LQASEB3/h5n1M8oRFIXpAJx57Kj4IwTxGagKCucvMFO05vxFJGdNMGxmfP5mKRCLzXx6BxyiKmV4fMn/2PCJr7W4sSGycGzBXQz3e8JmDTsc7668Hida5147B78zHCvejAzBgkqhkiG9w0BBwEwFAYIKoZIhvcNAwcECBujO0y+1cv8gBCNjmulM1+bvMPGdWpkBfOO" />

<Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountExpiration" value="2011-01-01T23:59:59.0000000+05:30" />

<Setting name="Microsoft.WindowsAzure.Plugins.RemoteForwarder.Enabled" value="true" />

</ConfigurationSettings>

<Certificates>

<Certificate name="Microsoft.WindowsAzure.Plugins.RemoteAccess.PasswordEncryption" thumbprint="E5B7C551309D21D26DEA8464380C61D7EC8FC4D1" thumbprintAlgorithm="sha1" />

</Certificates>

</Role>

</ServiceConfiguration>

Note: You would need to specify the encrypted password if you are configuring AccountEncryptedPassword manually. Following this article to encrypt the password using PowerShell.

ServiceDefinition.csdef

<?xml version="1.0" encoding="utf-8"?>

<ServiceDefinition name="RemoteConnect" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">

<WebRole name="HelloCloud">

<Sites>

<Site name="Web">

<Bindings>

<Binding name="Endpoint1" endpointName="Endpoint1" />

</Bindings>

</Site>

</Sites>

<Endpoints>

<InputEndpoint name="Endpoint1" protocol="http" port="80" />

</Endpoints>

<Imports>

<Import moduleName="Diagnostics" />

<Import moduleName="RemoteAccess" />

<Import moduleName="RemoteForwarder" />

</Imports>

</WebRole>

</ServiceDefinition>

Note: If you are configuring these settings manually, remember to add certificate to web role

6) Export the certificate created in step 3 to pfx format

a)       Open certificate snap in for “My user account” (current user)

b)       Navigate to Current User\Personal\Certificates

c)       Right click on the certificate that we created in step 3

d)       Choose All Tasks è Export è Choose Next

e)       Choose options as shown in screen shots

7) Upload the certificate to the Windows Azure portal

8) Deploy the application to cloud either via portal or VS2010 Publish option

9) Once the deployment is successful, Go to Windows Azure portal

10) Click on Connect to create .RDP file , save it locally and open the rdp file by double clicking on it

11) When prompted for credentials, specify the credentials mentioned in step 4

Voila! Connected to the VM!

site
site