DotNetNuke Silverlight 3.0 Hello World






4.93/5 (6投票s)
本教程的目标是引导您完成在 DotNetNuke 中创建一个简单的 Silverlight 模块,该模块通过 Web 服务对当前登录的用户进行身份验证。
引言
您必须从某个地方开始。本教程的目标是引导您完成在 DotNetNuke 中创建一个简单的 Silverlight 模块,该模块通过 Web 服务对当前登录的用户进行身份验证。
本教程所需
- Visual Studio 2008(或更高版本)
- Microsoft® Silverlight™ 3 Tools for Visual Studio 2008 SP1(如果您使用 Visual Studio 2008)
- DotNetNuke 5.1(或更高版本)
设置
您首先需要设置一个 DotNetNuke 开发环境。您将使用此环境来开发您的 DotNetNuke Silverlight 模块。之后,您可以创建一个模块包以安装在另一个 DotNetNuke 生产网站中。
请点击相应的链接来设置您的 DotNetNuke 开发环境
- 设置环境(使用 IIS)
- 设置环境(不使用 IIS)
- 在 Windows Vista(或更高版本)上设置开发环境(使用 IIS)
注意:如果您使用 IIS,还需要添加 MIME 类型到您的 Web 服务器。
创建应用程序

使用 Visual Studio 打开 DotNetNuke 网站(**文件** -> **打开网站...**)

在**解决方案资源管理器**中,右键单击**DesktopModules**文件夹,然后创建一个名为**HelloWorld3**的新文件夹

右键单击**HelloWorld3**文件夹,然后选择**添加新项...**

创建一个名为**View.ascx**的**Web 用户控件**。请确保“**在单独文件中放置代码**”复选框已**选中**。
在源视图中打开 View.ascx 页面,并将所有代码替换为以下代码
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="View.ascx.cs" Inherits="HelloWorld3.View" %>
<script type="text/javascript">
    function onSilverlightError(sender, args) {
        var appSource = "";
        if (sender != null && sender != 0) {
            appSource = sender.getHost().Source;
        }
        var errorType = args.ErrorType;
        var iErrorCode = args.ErrorCode;
        if (errorType == "ImageError" || errorType == "MediaError") {
            return;
        }
        var errMsg = "Unhandled Error in Silverlight Application " + appSource + "\n";
        errMsg += "Code: " + iErrorCode + "    \n";
        errMsg += "Category: " + errorType + "       \n";
        errMsg += "Message: " + args.ErrorMessage + "     \n";
        if (errorType == "ParserError") {
            errMsg += "File: " + args.xamlFile + "     \n";
            errMsg += "Line: " + args.lineNumber + "     \n";
            errMsg += "Position: " + args.charPosition + "     \n";
        }
        else if (errorType == "RuntimeError") {
            if (args.lineNumber != 0) {
                errMsg += "Line: " + args.lineNumber + "     \n";
                errMsg += "Position: " + args.charPosition + "     \n";
            }
            errMsg += "MethodName: " + args.methodName + "     \n";
        }
        throw new Error(errMsg);
    }
</script>
<asp:Panel ID="silverlightControlHost" align="center" runat="server" 
    HorizontalAlign="Left">
    <object data="data:application/x-silverlight-2," type="application/x-silverlight-2"
        style="height: 50px; width: 500px">
        <param name="source" value="<%=SilverlightApplication %>" />
        <param name="onError" value="onSilverlightError" />
        <param name="background" value="Transparent" /> 
        <param name="windowless" value="true" /> 
        <param name="minRuntimeVersion" value="3.0.40624.0" />
        <param name="autoUpgrade" value="true" />
        <param name="InitParams" value="<%=SilverlightInitParams %>" />
        <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=3.0.40624.0" style="text-decoration: none">
            <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight"
                style="border-style: none" />
        </a>
    </object>    <iframe id="_sl_historyFrame" style="visibility: hidden; height: 0px; width: 0px;
        border: 0px"></iframe>
</asp:Panel>
在源模式下打开**View.ascx.cs**文件,并将所有代码替换为以下代码
using System;
using DotNetNuke.Entities.Modules;
namespace HelloWorld3
{
    public partial class View : PortalModuleBase
    {
        public string SilverlightApplication { get; set; }
        public string SilverlightInitParams { get; set; }
        protected void Page_Load(object sender, EventArgs e)
        {
            // Register Silverlight.js file
            Page.ClientScript.RegisterClientScriptInclude(this.GetType(), "SilverlightJS",
                (this.TemplateSourceDirectory + "/Silverlight.js"));
            // Set the Web Service URL
            string strWebServiceURL = String.Format(@"http://{0}/{1}", this.PortalAlias.HTTPAlias,
                "/DesktopModules/HelloWorld3/WebService.asmx");        
            
            // Set the path to the .xap file
            SilverlightApplication = String.Format("{0}{1}", TemplateSourceDirectory,
                "/ClientBin/HelloWorld3.xap");
            // Pass the Initialization Parameters to the Silverlight Control
            SilverlightInitParams = string.Format("WebServiceURL={0}", strWebServiceURL);
        }
    }
}
保存页面

下载此文件:Silverlight.js,将其保存到您的本地硬盘驱动器,然后将其放在**DesktopModules/HelloWorld3**目录中

右键单击**HelloWorld3**文件夹,然后选择**添加新项...**

添加一个名为**Webservice.asmx**的**Web 服务**。请确保“**在单独文件中放置代码**”复选框已**取消选中**。
在源视图中打开 Webservice.asmx 文件,并将所有代码替换为以下代码
<%@ WebService Language="C#" Class="HelloWorld3.WebService" %>
using System.Web.Services;
using DotNetNuke.Entities.Users;
namespace HelloWorld3
{
    [WebService(Namespace = "http://ADefWebserver.com/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    public class WebService : System.Web.Services.WebService
    {
        #region GetUsername()
        [WebMethod]
        public string GetUsername()
        {
            string strUsername = "World!";
            // Get the current user 
            UserInfo objUserInfo = UserController.GetCurrentUserInfo();
            // If the user is not -1 they are logged in
            if (objUserInfo.UserID > -1)
            {
                strUsername = objUserInfo.DisplayName;
            }
            return strUsername;
        }
        #endregion
    }
}
创建 Silverlight 应用程序

从菜单中,选择**文件**,然后**添加**,然后**新建项目...**

创建一个名为“**HelloWorld3**”的 Silverlight 应用程序

在**添加 Silverlight 应用程序**框中,将项目添加到现有网站。

项目将添加到**解决方案资源管理器**中

右键单击(Silverlight 项目中的)**引用**文件夹,然后选择**添加服务引用...**

单击**发现**按钮以查找您在上一阶段创建的 Web 服务。
输入**HelloWorld**作为命名空间
单击 **确定** 按钮
打开**App.xaml.cs**文件,并将**Application_Startup**方法更改为以下代码
        private void Application_Startup(object sender, StartupEventArgs e)
        {
            this.RootVisual = new Page(e.InitParams["WebServiceURL"]); 
        }
打开**Page.xaml**文件,并将所有代码替换为以下代码
<UserControl x:Class="HelloWorld3.Page"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="50" d:DesignWidth="400">
    <Canvas x:Name="LayoutRoot">
        <TextBlock Canvas.Left="8" Canvas.Top="8" FontSize="26.667" Text="Hello:" TextWrapping="Wrap"/>
        <TextBlock Canvas.Left="91" Canvas.Top="8" FontSize="26.667" x:Name="UserName" TextWrapping="Wrap"/>
    </Canvas>
</UserControl>
打开**Page.xaml.cs**文件,并将所有代码替换为以下代码
 using System;
using System.Windows.Controls;
using HelloWorld3.HelloWorld;
using System.ServiceModel;
namespace HelloWorld3
{
    public partial class Page : UserControl
    {
        private string WebServiceURL;
        public Page(string parmWebServiceURL)
        {
            InitializeComponent();
            // Set the web service URL global values
            WebServiceURL = parmWebServiceURL;
            CallWebService();
        }
        #region CallWebService
        private void CallWebService()
        {
            WebServiceSoapClient objWebServiceSoapClient = new WebServiceSoapClient();
            EndpointAddress MyEndpointAddress = new EndpointAddress(WebServiceURL);
            objWebServiceSoapClient.Endpoint.Address = MyEndpointAddress;
            objWebServiceSoapClient.GetUsernameCompleted +=
                new EventHandler<GetUsernameCompletedEventArgs>(objWebServiceSoapClient_GetUsernameCompleted);
            objWebServiceSoapClient.GetUsernameAsync();
        }
        void objWebServiceSoapClient_GetUsernameCompleted(object sender, GetUsernameCompletedEventArgs e)
        {
            UserName.Text = e.Result;
        }
        #endregion
    }
}

在**解决方案资源管理器**中右键单击 Silverlight 项目,然后选择**生成**

**HelloWorld3.xap**文件将生成到 DotNetNuke 网站中的一个名为**ClientBin**的目录中

在**解决方案资源管理器**中,将**ClientBin**文件夹拖动到**DesktopModules/HelloWorld3**目录下方
配置模块

在您的**Web 浏览器**中,以**主机**帐户登录您的 DotNetNuke 网站。在**主机**菜单中,选择**模块定义**

在**模块定义**页面的底部,选择**创建新模块**

输入**HelloWorld3**作为**名称**和**友好名称**,将**版本**设置为**01 00 00**,然后单击**下一步**按钮

在**模块特定详细信息**页面上,单击**下一步**

在**所有者详细信息**页面上,单击**下一步**

模块将显示在**模块定义**页面上。单击**HelloWorld3**条目旁边的铅笔图标进行编辑

单击**添加定义**按钮

输入**HelloWorld3**作为**友好名称**,然后单击**创建定义**按钮

单击**添加模块控件**按钮

输入“**Hello World**”作为**标题**,选择**DesktopModules/HelloWorld3/View.ascx**作为**源**,然后单击**更新**

导航到您 DotNetNuke 网站中的某个页面,并将**HelloWorld3**模块放置在该页面上

模块将显示。


