<style>
body {margin:10px;background-color:#ffffff;margin-top:6px;}
form{margin:0px;}
* {font:12px tahoma;line-height:140%;color:#000000}
.title {font-weight:bold;color:red;}
.time {font:10px;color:#999999;}
a {text-decoration:none;color:blue;}
</style>
<script type=”text/javascript”>
var switcher=0;
</script>
<body ondblclick=”if(switcher==0){document.styleSheets[0].addRule(‘div’,’display:none’);switcher=1}else{document.styleSheets[0].addRule(‘div’,’display:block’);switcher=0}”>
<form name=”rssform” method=post action=””>
RSS资源:<INPUT TYPE=”text” NAME=”RssFeed” size=60 style=”height:22px” value=”<%=request(“RssFeed”)%>” onfocus=select()> <input type=”submit” value=”Read It”> 双击鼠标可以关闭摘要,只显示标题
</form>
<hr/>
<%
If(request(“RssFeed”)=””) Then
url=”/rss2.asp”
else
url=request(“RssFeed”)
End If
Set xml = Server.CreateObject(“Microsoft.XMLHTTP”)
xml.Open ”GET”, url, False
xml.Send
Set xmlDom = server.createObject(“microsoft.xmldom”)
xmlDom.async=False
xmlDom.ValidateOnParse=false
xmlDom.load(xml.responseXML)
if xmlDom.ReadyState>2 Then
set oItem=xmlDom.getElementsByTagName(“item”)
for i=0 to oItem.length-1
response.write ”<span style=’font:bold 9px verdana;color:#000000′>”&i+1&”</span>. <a class=’title’ href=’”&oItem(i).childNodes(1).text&”‘ target=’_blank’>”&oItem(i).childNodes(0).text&”</a> <span class=’time’>["&oItem(i).childNodes(3).text&"]<br />”
response.write ”<div>摘要:”&oItem(i).childNodes(4).text&”</div><br>”
next
end if
%>
【ASP】标签文章列表
用Asp+XmlHttp实现RssReader功能
2009年微软Silverlight十大流行应用
微软在2009年12月,发布Silverilght 4 Beta版本,其强大的功能,又一次吸引了众多RIA程序员的眼球,列出十个最流行的Silverlight应用项目如下:
1. Microsoft SDK for FacebookSNS应用是2009年的热门话题,为了推广Silverlight,微软很快推出了Silverlight FaceBook SDK。
2. Silverlight 3 和 Expression 3对于应用开发人员和界面设计人员来说,Silverlight Tools和Expression系列是最热门的应用。通过这两个应用,开发人员和设计人员可以快速开发出专业的Silverlight应用。
3. Silverlight 4 BetaSilverlight 4 的发布,让大家耳目一新,更多新的功能吸引了众多微软技术的追随者。
4. NASA应用Silverlight技术应用于NASA,NASA使用Silverlight技术播放太空空间站图片组。
5. Netflix 和 Windows Media CenterNetflix使用Silverlight多媒体技术提供在线电影DVD视频查看服务。
6. Wimbledon (温布尔顿网球公开赛)温布尔顿网球冠军赛使用Silverlight技术进行在线视频播放。
7. NBC使用Silverlight技术获得艾美奖NBC使用Silverlight技术提供HD高清2008奥运会转播视频,获得艾美奖。
8. NAB09的IIS Smooth Streaming洛杉矶NAB 2009使用IIS+Silverlight进行高清视频播放。
9. 迈克尔杰克逊纪念视频网迈克尔杰克逊的粉丝使用Silverlight技术,创建迈克尔杰克逊的音乐纪念网站。
10. Silverlight Bing和Bing Map控件微软提供Silverlight Bing Visual Search服务,另外发布了Bing Map控件。
ASP实现网页打开任何类型文件都保存
当页面上有一个链接指向服务器一个Word文件,当客户端机器有安装Office时,点击链接将调用Word打开浏览;当客户端机器没有安装Office时,点击链接将弹出保存对话框。总结一下即如果浏览器认识文件类型,就会自动打开;如果不认识,则会提示客户保存。可是有时候我们希望不管什么类型文件,都不要打开,直接让客户端保存。要达到这个要求,对于保存在服务器硬盘上的文件就得利用ASPUpload组件的SendBinary方法来实现,而对于保存在数据库中的文件则只须打开记录集,然后将二进制数据直接输出到客户端即可,不过要告诉浏览器文件的MIME类型、文件名称和文件大小。
1.服务器端硬盘上的文件
以下是引用片段:
<%
Dim Upload,FilePath
Set Upload = Server.CreateObject(“Persits.Upload”)
FilePath = Server.MapPath(“.”) & ”\” & ”2003529213019.txt”
‘SendBinary参数说明:
‘参数一:文件物理路径
‘参数二:是否将文件的MIME类型等信息传送给浏览器
‘参数三:文件类型,可以指定具体的MIME类型,但一般都可以使用application/octet-binary
‘参数四:让客户端保存文件还是直接打开。True:保存;False(默认):打开
Upload.SendBinary FilePath,True,”application/octet-binary”,True
%>
2.服务器端数据库中的文件
<%
Dim objConn,objRs
Set objConn = Server.CreateObject(“ADODB.Connection”)
Set objRs = Server.CreateObject(“ADODB.RecordSet”)
objConn.open ”Driver={Microsoft Access Driver (*.mdb)};dbq=” & Server.MapPath(“db1.mdb”)
objRs.open ”select * from t5 where id=2″,objConn,1,3
Response.ContentType = ”application/octet-stream”
Response.AddHeader ”Content-Disposition”,”attachment;filename=” & objRs(“filename”)
Response.AddHeader ”Content-Length”,CStr(objRs(“size”)) ’此处必须用CStr转换
Response.BinaryWrite objRs(“file”)
objRs.close
Set objRs = nothing
objConn.close
Set objConn = nothing
%>
此法要求保存文件时需同时保存文件名及文件大小!若未指定文件名及大小,如果浏览器认识该文件类型,将会自动打开;如果不认识,才会提示客户保存!
用ASP取出HTML里面的图片地址的函数
用ASP取出HTML里面的图片地址的函数主要原理就是用正则判断的属性。这在采集程序中将非常有用。
函数如下:
以下是引用片段:
Function ShowPic(str)
Set objRegExp = New Regexp’设置配置对象
objRegExp.IgnoreCase = True’忽略大小写
objRegExp.Global = True’设置为全文搜索
objRegExp.Pattern = ”<img.+?>”
’为了确保能准确地取出图片地址所以分为两层配置:首先找到里面的<img>标签,然后再取出里面的图片地址后面的getimgs函数就是实现后一个功能的。
strs=trim(str)
Set Matches =objRegExp.Execute(strs)’开始执行配置
For Each Match in Matches
RetStr = RetStr &getimgs( Match.Value )’执行第二轮的匹配
Next
ShowPic = RetStr
End Function
Function getimgs(str)
getimgs=””
Set objRegExp1 = New Regexp
objRegExp1.IgnoreCase = True
objRegExp1.Global = True
objRegExp1.Pattern = ”http://.+?”””‘取出里面的地址
set mm=objRegExp1.Execute(str)
For Each Match1 in mm
getimgs=getimgs&left(Match1.Value,len(Match1.Value)-1)&”||”‘把里面的地址串起来备用
next
End Function
‘取得图片内容
function getHTTPPage(url)
on error resume next
dim http
set http=server.createobject(“MSXML2.XMLHTTP”)’使用xmlhttp的方法来获得图片的内容
Http.open ”GET”,url,false
Http.send()
if Http.readystate<>4 then
exit function
end if
getHTTPPage=Http.responseBody
set http=nothing
if err.number<>0 then err.Clear
end function
‘保存图片
function saveimage(from,tofile)
dim geturl,objStream,imgs
geturl=trim(from)
imgs=gethttppage(geturl)’取得图片的具休内容的过程
Set objStream = Server.CreateObject(“ADODB.Stream”)’建立ADODB.Stream对象,必须要ADO 2.5以上版本
objStream.Type =1′以二进制模式打开
objStream.Open
objstream.write imgs’将字符串内容写入缓冲
objstream.SaveToFile server.mappath(tofile),2′-将缓冲的内容写入文件
objstream.Close()’关闭对象
set objstream=nothing
end function
‘调用实例
Dim strpic,i,fname
strpic = ShowPic(“<DIV align=center><IMG src=””图片地址”” border=0></DIV>”)
strpic = Split(strpic,”||”)
If UBound(strpic) > 0 Then
For i = 0 To UBound(strpic) - 1
‘保存图片
fname=cstr(i&mid(strpic(i),instrrev(strpic(i),”.”)))
saveimage(strpic(i),fname)
Next
Else
End If
如何在ASP.Net 中把图片存入数据库
介绍
可能有很多的时候,我们急需把图片存入到数据库当中。在一些应用程序中,我们可能有一些敏感的资料,由于存储在文件系统(file system)中的东西,将很容易被某些用户盗取,所以这些数据不能存放在文件系统中。
在这篇文章中,我们将讨论怎样把图片存入到Sql2000当中。
在这篇文章中我们可以学到以下几个方面的知识:
1. 插入图片的必要条件
2. 使用流对象
3. 查找准备上传的图片的大小和类型
4.怎么使用InputStream方法?
插入图片的必要条件
在我们开始上传之前,有两件重要的事我们需要做:
#Form 标记的 enctype 属性应该设置成 enctype=”multipart/form-data”
# 需要一个<input type=file>表单来使用户选择他们要上传的文件,同时我们需要导入 System.IO名称空间来处理流对象
把以上三点应用到aspx页面。同时我们需要对SqlServer做以下的准备。
# 需要至少含有一个图片类型的字段的表
# 如果我们还有另外一个变字符类型的字段来存储图片类型,那样会更好一些。
现在,我们准备了一个Sql表(包含了一个image数据类型的字段),还有<input type=file>标记。当然我们还得准备Submit按钮,以便用户在选择了图片以后提交。在这个按钮的Onclick事件里,我们需要读取选取图片的内容,然后把它存入到表里。那我们先来看看这个Onclick事件。
提交按钮的Onclick事件的代码:
Dim intImageSize As Int64
Dim strImageType As String
Dim ImageStream As Stream
’ Gets the Size of the Image
intImageSize = PersonImage.PostedFile.ContentLength
’ Gets the Image Type
strImageType = PersonImage.PostedFile.ContentType
’ Reads the Image
ImageStream = PersonImage.PostedFile.InputStream
Dim ImageContent(intImageSize) As Byte
Dim intStatus As Integer
intStatus = ImageStream.Read(ImageContent, 0, intImageSize)
’ Create Instance of Connection [...]
认识ASP.NET配置文件Web.config
一、认识Web.config文件
Web.config文件是一个XML文本文件,它用来储存 ASP.NET Web 应用程序的配置信息(如最常用的设置ASP.NET Web 应用程序的身份验证方式),它可以出现在应用程序的每一个目录中。当你通过VB.NET新建一个Web应用程序后,默认情况下会在根目录自动创建一个默认的
Web.config文件,包括默认的配置设置,所有的子目录都继承它的配置设置。如果你想修改子目录的配置设置,你可以在该子目录下新建一个Web.config文件。它可以提供除从父目录继承的配置信息以外的配置信息,也可以重写或修改父目录中定义的设置。
在运行时对Web.config文件的修改不需要重启服务就可以生效(注:<processModel> 节例外)。当然Web.config文件是可以扩展的。你可以自定义新配置参数并编写配置节处理程序以对它们进行处理。
二、web.config配置文件(默认的配置设置)以下所有的代码都应该位于
<configuration>
<system.web>
和
</system.web>
</configuration>
之间,出于学习的目的下面的示例都省略了这段XML标记
1、<authentication> 节
作用:配置 ASP.NET 身份验证支持(为Windows、Forms、PassPort、None四种)。该元素只能在计算机、站点或应用程序级别声明。<authentication> 元素必需与<authorization> 节配合使用。
示例:
以下示例为基于窗体(Forms)的身份验证配置站点,当没有登陆的用户访问需要身份验证的网页,网页自动跳转到登陆网页。
<authentication mode=”Forms” >
<forms loginUrl=”logon.aspx” name=”.FormsAuthCookie”/>
</authentication>
其中元素loginUrl表示登陆网页的名称,name表示Cookie名称
2、<authorization> 节
作用:控制对 URL 资源的客户端访问(如允许匿名用户访问)。此元素可以在任何级别(计算机、站点、应用程序、子目录或页)上声明。必需与<authentication> 节配合使用。
示例:以下示例禁止匿名用户的访问
<authorization>
<deny users=”?”/>
</authorization>
注:你可以使用user.identity.name来获取已经过验证的当前的用户名;可以使用
web.Security.FormsAuthentication.RedirectFromLoginPage方法将已验证的用户重定向到用户刚才请求的页面.具体的实例请参考:
Forms验证 http://www.fanvb.net/websample/dataauth.aspx
3、<compilation>节
作用:配置 ASP.NET 使用的所有编译设置。默认的debug属性为“True”.在程序编译完成交付使用之后应将其设为True(Web.config文件中有详细说明,此处省略示例)
4、<customErrors>
作用:为 ASP.NET 应用程序提供有关自定义错误信息的信息。它不适用于 XML Web services 中发生的错误。
示例:当发生错误时,将网页跳转到自定义的错误页面。
<customErrors defaultRedirect=”ErrorPage.aspx” mode=”RemoteOnly”>
</customErrors>
其中元素defaultRedirect表示自定义的错误网页的名称。mode元素表示:对不在本地 Web 服务器上运行的用户显示自定义(友好的)信息。
5、<httpRuntime>节
作用:配置 ASP.NET HTTP 运行库设置。该节可以在计算机、站点、应用程序和子目录级别声明。
示例:控制用户上传文件最大为4M,最长时间为60秒,最多请求数为100
<httpRuntime maxRequestLength=”4096″ executionTimeout=”60″ appRequestQueueLimit=”100″/>
6、 <pages>
作用:标识特定于页的配置设置(如是否启用会话状态、视图状态,是否检测用户的输入等)。<pages>可以在计算机、站点、应用程序和子目录级别声明。
示例:不检测用户在浏览器输入的内容中是否存在潜在的危险数据(注:该项默认是检测,如果你使用了不检测,一要对用户的输入进行编码或验证),在从客户端回发页时将检查加密的视图状态,以验证视图状态是否已在客户端被篡改。(注:该项默认是不验证)
<pages buffer=”true” enableViewStateMac=”true” validateRequest=”false”/>
7、<sessionState>
作用:为当前应用程序配置会话状态设置(如设置是否启用会话状态,会话状态保存位置)。
示例:
<sessionState mode=”InProc” cookieless=”true” timeout=”20″/>
</sessionState>
注:
mode=”InProc”表示:在本地储存会话状态(你也可以选择储存在远程服务器或SAL服务器中或不启用会话状态)
cookieless=”true”表示:如果用户浏览器不支持Cookie时启用会话状态(默认为False)
timeout=”20″表示:会话可以处于空闲状态的分钟数
8、<trace>
作用:配置 ASP.NET 跟踪服务,主要用来程序测试判断哪里出错。
示例:以下为Web.config中的默认配置:
<trace enabled=”false” requestLimit=”10″ pageOutput=”false” traceMode=”SortByTime” localOnly=”true” />
注:
enabled=”false”表示不启用跟踪;requestLimit=”10″表示指定在服务器上存储的跟踪请求的数目
pageOutput=”false”表示只能通过跟踪实用工具访问跟踪输出;
traceMode=”SortByTime”表示以处理跟踪的顺序来显示跟踪信息
localOnly=”true” [...]
Asp.net中防止用户多次登录的方法
在web开发时,有的系统要求同一个用户在同一时间只能登录一次,也就是如果一个用户已经登录了,在退出之前如果再次登录的话需要报错。
常见的处理方法是,在用户登录时,判断此用户是否已经在Application中存在,如果存在就报错,不存在的话就加到Application中(Application是所有Session共有的,整个web应用程序唯一的一个对象):
string strUserId = txtUser.Text;
ArrayList list = Application.Get(“GLOBAL_USER_LIST”) as ArrayList;
if (list == null)
{
list = new ArrayList();
}
for (int i = 0; i < list.Count; i++)
{
if (strUserId == (list[i] as string))
{
//已经登录了,提示错误信息
lblError.Text = ”此用户已经登录”;
return;
}
}
list.Add(strUserId);
Application.Add(“GLOBAL_USER_LIST”, list);
当然这里使用Cache等保存也可以。
接下来就是要在用户退出的时候将此用户从Application中去除,我们可以在Global.asax的Session_End事件中处理:
void Session_End(object sender, EventArgs e)
{
// 在会话结束时运行的代码。
// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
// InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer
// 或 SQLServer,则不会引发该事件。
string strUserId = Session["SESSION_USER"] as string;
ArrayList list = Application.Get(“GLOBAL_USER_LIST”) as ArrayList;
if (strUserId != null && list != null)
{
list.Remove(strUserId);
Application.Add(“GLOBAL_USER_LIST”, list);
}
}
这些都没有问题,有问题的就是当用户直接点浏览器右上角的关闭按钮时就有问题了。因为直接关闭的话,并不会立即触发Session过期事件,也就是关闭浏览器后再来登录就登不进去了。
这里有两种处理方式:
1、使用Javascript方式
在每一个页面中加入一段javascript代码:
function window.onbeforeunload()
{
if (event.clientX>document.body.clientWidth && event.clientY<0||event.altKey){
window.open(“logout.aspx”);
}
}
由于onbeforeunload方法在浏览器关闭、刷新、页面调转等情况下都会被执行,所以需要判断是点击了关闭按钮或是按下Alt+F4时才执行真正的关闭操作。
然后在logout.aspx的Page_Load中写和Session_End相同的方法,同时在logout.aspx中加入事件:onload=”javascript:window.close()”
但是这样还是有问题,javascript在不同的浏览器中可能有不同的行为,还有就是当通过文件->关闭时没有判断到。
2、使用xmlhttp方法(这种方法测试下来没有问题)
在每个页面中加入如下的javascript(这些javascript也可以写在共通里,每个页面引入就可以了)
var x=0;
function myRefresh()
{
var httpRequest = new ActiveXObject(“microsoft.xmlhttp”);
httpRequest.open(“GET”, ”test.aspx”, false);
httpRequest.send(null);
x++;
if(x<60) //60次,也就是Session真正的过期时间是30分钟
{
setTimeout(“myRefresh()”,30*1000); //30秒
}
}
myRefresh();
在web.config中设置
<sessionState mode=”InProc” timeout=”1″></sessionState>
test.aspx页面就是一个空页面,只不过需要在Page_Load中加入:
Response.Expires = -1;
保证不使用缓存,每次都能调用到这个页面。
原理就是:设置Session的过期时间是一分钟,然后在每个页面上定时每30秒连接一次测试页面,保持Session有效,总共连60次,也就是30分钟。如果30分钟后用户还没有操作,Session就会过期。当然,如果用户直接关闭浏览器,那么一分钟后Session也会过期。这样就可以满足要求了。
在Asp.net MVC中使用Repeater
1. Repeater需要手动去绑定数据。 意思是说我们要在View当中写 服务端代码,先从ViewData中取得数据,再去绑定到Repeater。
2. 如果一个页面用到n+1个Repeater,那会不会疯掉? 而且要给每一个Repeater指定 Id,必去绑数据,头痛啊!!!
那么~~ 可不可以让Repeater用起来简单点呢? 来对Repeater进行一下改造,达到目的。
在Mvc当中,使用 ViewData 来传递数据,那可不可以直接让Repeater 绑定 ViewData 中的数据呢? 当然可以
看改造后的 Repeater 源码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.Mvc;
namespace RepeaterInMvc.Codes
{
public class MvcRepeater : Repeater
{
/// <summary>
/// ViewData中的键名
/// </summary>
public string Key { get; set; }
/// <summary>
/// 得到ViewPage对象
/// </summary>
protected ViewPage ViewPage
{
get { return base.Page as ViewPage; }
}
/// <summary>
/// 重写Onload事件 用于绑定数据
/// </summary>
/// <param name=”e”></param>
protected override void OnLoad(EventArgs e)
{
this.DataSource = this.ViewPage.ViewData[this.Key]; //得到数据源
this.DataBind(); //绑定 这样就不用手动写N个绑定了
base.OnLoad(e);
}
}
}
上面的代码做了什么:
1. 添加了一个公共属性 Key ,表示这个Repeater要绑定 ViewData 中哪一项数据。
2. 添加了一个保护属性 ViewPage ,指向了当前的 Page 对象 并强制转换成 Mvc 的 ViewPage对象 (因为我们要得到ViewData或其它Mvc相关的上下文信息)
3. 重写了 OnLoad 事件,重写这个事件,用来绑定数据,免得我们需要在View中手动绑定每一个Repeater,那多烦啊。
现在我们的目的已经达到了。看看怎么使用吧:
控制器代码:
public ActionResult Index()
{
//来点测试数据
List<Models.TestInfo> entities = new List<RepeaterInMvc.Models.TestInfo>();
entities.Add(new RepeaterInMvc.Models.TestInfo { Id = 1, Name = ”Kagilo1″, Email = ”1@1.com” });
entities.Add(new RepeaterInMvc.Models.TestInfo { Id = 2, Name = ”Kagilo2″, Email = ”1@1.com” });
entities.Add(new RepeaterInMvc.Models.TestInfo { Id = 3, Name = ”Kagilo3″, Email = ”1@1.com” });
entities.Add(new RepeaterInMvc.Models.TestInfo { Id = 4, Name = ”Kagilo4″, Email = ”1@1.com” });
entities.Add(new RepeaterInMvc.Models.TestInfo { Id = 5, Name = ”Kagilo5″, Email = ”1@1.com” });
ViewData["TestList"] = entities;
return View();
}
再看看页面代码:
<%@ Register Assembly=”RepeaterInMvc” Namespace=”RepeaterInMvc.Codes” TagPrefix=”mvc” %>
<asp:Content ID=”indexTitle” ContentPlaceHolderID=”TitleContent” runat=”server”>
Home Page
</asp:Content>
<asp:Content ID=”indexContent” ContentPlaceHolderID=”MainContent” runat=”server”>
<h2>Repeater示例</h2>
<p>
<mvc:MvcRepeater Key=”TestList” runat=”server”>
<ItemTemplate>
<div style=”height:30px; line-height:30px;”><%# Eval(“Id”) %>, <%# Eval(“Name”) %>, <%# Eval(“Email”) %></div>
</ItemTemplate>
<AlternatingItemTemplate>
<div style=”height:30px; line-height:30px; background:#eeeeee;”><%# Eval(“Id”) %>, <%# Eval(“Name”) %>, <%# Eval(“Email”) %></div>
</AlternatingItemTemplate>
</mvc:MvcRepeater>
</p>
</asp:Content>
TPS :<%@ Register Assembly=”RepeaterInMvc” Namespace=”RepeaterInMvc.Codes” TagPrefix=”mvc” %>
在当前页面注册控件!!! 当然,你也可以在 web.config 中的 page/controls 节点中为所有页面注册。
ASP.NET编程经验技巧10则
4、使用StringBuilder类
字符串在.NET框架中是不可变的,这意味着改变字符串的操作符和方法会返回字符串的改变后的拷贝,这意味着性能还有提高的空间。当进行大量的字符串操作时,使用StringBuilder类就是一种比较好的选择了。
下面的C#代码测试用二种方式从10000个子字符串中生成字符串所需要的时间。第一次使用了一个简单的字符串串联操作;第二次使用了StringBuilder类。
要想查看结果字符串,可以去掉下面的代码中注解行的注解符号:
以下为引用的内容:
< %@ Page Language=”C#” %>
< script runat=”server”>
void Page_Load(Object Source, EventArgs E)
{
int intLimit = 10000;
DateTime startTime;
DateTime endTime;
TimeSpan elapsedTime;
string strSub;
string strWhole = “”;
// 首先执行字符串连接操作
startTime = DateTime.Now;
for (int i=0; i < intLimit; i++)
{
strSub = i.ToString();
strWhole = strWhole + “ “ + strSub;
}
endTime = DateTime.Now;
elapsedTime = endTime – startTime;
lblConcat.Text = [...]
Moonlight 2.0紧随Silverlight而来
Moonlight 2.0版本现在可以从Novell的Mono项目网站上下载了,可用于Firefox插件。这个软件允许WMA文件和内容在Linx下执行,并使用微软的 富互联网Silverligh技术。新的版本,原定几个月彰推出,目前是为了广泛兼容Silverlight 2.0。
当前微软的RIA产品稳定版本是3.0,但公司已经在他的专业开发者大会上推出了4.0测试版。如果Moonligh开发团队能按全的雄心目标,根 据路线图计划Silverlight 3的Linux实现应该在2010年第三季度推出,届时也将推出Moonlight 4 alpha版本。
有媒体报导引用了Novell产品开发副总裁Miguel de Icaza,他说在Moonlight 2中将包含一些 Silverlight 3介绍中的功能。例如:模块化媒体管道,Ogg和Dirac编解码器,改进了流媒体功能让用户在视频中前进后退几乎看不到延迟。 3D像素渲染没有实现。
Moonlight的开发者应用程序需要使用Microsoft的Visual Studio开发环境或MonoDevelop,它的2.2版本昨天刚刚发布。Mono runtime包括了Moonlight 2将允许 C#, Ruby, Python和JavaScript开发者为Moonlight开发应用。
最后还提到了专约问题,微软承诺不会起诉用户和厂商使用Moonlight中的微软技术,这意味着linux发行版,如Ubuntu或Fedora将可以包括Moonlight发行,而不会受到微软诉讼恐惧。
微软经常使用承诺一词,以后谁知道会不会发生。