将参数从silverlight传递到ASP.net

我在Silverlight上做了一个小游戏,在玩游戏时记录用户的分数。

我决定如果我能实现一个排行榜会更好,所以我在mySQL中创建了一个数据库来存储所有高分以及名称和日期。 我在ASP.net中创建了一些与数据库的通信。 这有效,我可以简单地在代码中插入和获取数据。

现在是时候将Silverlight项目与ASP.net数据库通信联系起来了,所以我可以将用户名和分数作为变量发送到我的ASP.net代码,然后将其上传到数据库。 这就是我所需要的一切。 当然必须有一种简单的方法来做到这一点,我似乎无法在研究时找到任何方法。

提前谢谢,劳埃德

首先,您需要将Generic Handler添加到ASP.Net项目中。

public class Handler1 : IHttpHandler { public void ProcessRequest(HttpContext context) { string userName = context.Request["user"]; int score = int.Parse(context.Request["score"]); //And store it in DB } } 

在您需要从SilverLight应用程序调用此处理程序之后:

  string uri = HtmlPage.Document.DocumentUri.ToString(); // Remove the web page from the current URI to get the root URI. string rootUri = uri.Remove(uri.LastIndexOf('/'), uri.Length - uri.LastIndexOf('/')); string diggUrl = String.Format(rootUri + "/" + "test.ashx?user={0}&score={1}", "testuser", "234"); // Initiate Async Network call to Digg WebClient diggService = new WebClient(); diggService.DownloadStringAsync(new Uri(diggUrl)); 

这里我使用Uri Class将参数发送到asp.net,但是你只能发送字符串格式。

//此代码写在Silverlight按钮单击事件。

 Uri myURI = new Uri(HtmlPage.Document.DocumentUri,String.Format("Report.aspx?brcd={0}&acc={1}&user={2}", Brcd, Acc, User)); HtmlPage.Window.Navigate(myURI, "_blank"); 

下面的代码写在Asp.net page_load或page init事件上

  Brcd = Request.QueryString["brcd"];// brcd value accept here. acc= Request.QueryString["ACC"];` user= Request.QueryString["User"]; 

在上面的代码中我们接受asp.net中的silverlight参数,但是在[]括号中放置名称,因为它在Silverlight页面中使用,因为它区分大小写。

通过ASP.NET,您的意思是ASP.NET Webforms应用程序吗?

如果是这样,ASP.NET Webforms应用程序是一种构建UI的方法。 您需要的是一个API,用于以编程方式使用Silverlight应用程序。 为此,您可能需要考虑构建一个ASP.NET Webservice,它通过HTTP提供API。

你需要它从Silverlight应用程序向Web服务器发送数据,对吗?

您可以:

  • 从Silverlight调用Javascript函数,并在那里进行回发
  • 使用Silverlight调用Web服务 ,但要确保它与SL应用程序所在的服务器相同,否则您将面临一些XSS问题。

一种简单的方法是让Silverlight代码通过将信息编码到查询字符串中并在服务器上调用.aspx页面来创建REST URL。 该页面不需要返回任何标记; 它只会处理后端的东西并返回。

或者,您可以从Silverlight进行Web服务调用到您的后端。

我更喜欢后一种方法。 这是第一次通过时更多的工作,但它也更通用,并且从长远来看通常会提供更好的代码。

虽然从技术上讲你可以使用JavaScript,但我不会建议它; 如果你不需要,为什么要倒退?