5

由于我在 Windows Phone 8 开发方面不太熟练,我想讨论/询问将我的 Windows Phone 8 连接到 Sql-Server Database 的最佳方法是什么。我试图通过互联网搜索,发现只有少数指南对我使用WebService的 Linq-to-Sql不起作用。是我失败的地方。

首先我想显示数据——这是最重要的,我还不需要编辑它们。但在未来,这是不可避免的。

如果编辑可行,我需要直接在我连接的 Sql Server 上编辑它们。我还检查了Sql Server Compact指南,但它只能在不支持 Windows Phone 8的CE 4.0(将数据从 Sql Server 导出到 Sql Compact)下工作。但即使它可以工作,它也只是将 Sql server 数据库复制到 Sql Compact,并且不能直接在 Sql Server 上处理数据(这是可以理解的,因为它是 Sql Server Compact)。

因此,当我深入搜索时,唯一的方法是使用 WebService,我遵循了YouTube 上的一些分步指南,但正如我之前提到的,问题在于显示数据,因为指南引导我使用 ListBox,因为它是Windows Phone 7.1 和 Windows Phone 8 中只有 LongListSelector。

我还发现了将 Windows Phone 和 Windows 8 应用程序连接到 SQL Server的问题,这对我很有帮助。

我想我需要一些分步指南。所以想问问大家有没有分步指南如何连接WP8和Sql Server?如果有人会是那种人并在这里编辑我的代码以使其工作。

感谢您花时间阅读本文和答案/评论。

多发性硬化症

4

1 回答 1

6

好吧,为了实现你的目标,我会这样做:

  1. 使用返回对象的 ASP.NET Web API ( http://www.asp.net/web-api ) 构建一个 REST Web 服务(这些对象将自动转换为 json)。例如:

    public class MyObject 
    {
      public string Content { get; set; }
    }
    

    它的控制器:

    public class TestController : ApiController
    {
      [HttpGet]
      public MyObject Example() {
        return new MyObject() { Content = "Hello World!" };
      }
    }
    
  2. 在你的 win 手机项目中使用 HTTP 客户端:

    HttpClient client = new HttpClient();
    client.BaseAddress = new Uri("http://mywebservice.com");
    client.DefaultRequest.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    
    using (var result = await client.GetStreamAsync("test/example"))
    {
      var serializer = new JsonSerializer(); // this is json.net serializer
      using (var streamReader = new StreamReader(result)) {
        using (var jsonReader = new JsonTextReader(streamReader))
        {
          var obj = serializer.Deserialize<MyObject>(jsonReader);
          // you can access obj.Content now to get the content which was created by the webservice
          // in this example there will be "Hello World!"
        }
      }
    }
    

当然,您可以创建更复杂的对象,这些对象将被(反)序列化。只需查看 Web API 教程。

在您的网络服务中,您现在可以访问您想要的任何数据库。

编辑如果您需要更详细的答案,请给我留言。

于 2013-08-16T11:12:02.657 回答