<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=WCF_Data_Services</id>
	<title>WCF Data Services - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=WCF_Data_Services"/>
	<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=WCF_Data_Services&amp;action=history"/>
	<updated>2026-07-07T05:53:22Z</updated>
	<subtitle>在这个wiki上该页的修订历史</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://arolstar52-zhtest.hf.space/index.php?title=WCF_Data_Services&amp;diff=420711&amp;oldid=prev</id>
		<title>imported&gt;Shawwww：​使用DisamAssist清理消歧义链接：LINQ（链接至语言集成查询）。</title>
		<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=WCF_Data_Services&amp;diff=420711&amp;oldid=prev"/>
		<updated>2024-09-10T16:07:26Z</updated>

		<summary type="html">&lt;p&gt;使用&lt;a href=&quot;/index.php?title=User:%E6%9A%81%E6%9C%88%E5%87%9B%E5%A5%88/DisamAssist&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;User:暁月凛奈/DisamAssist（页面不存在）&quot;&gt;DisamAssist&lt;/a&gt;清理&lt;a href=&quot;https://en.wikipedia.org/wiki/%E6%B6%88%E6%AD%A7%E4%B9%89&quot; class=&quot;extiw&quot; title=&quot;wikipedia:消歧义&quot;&gt;消歧义&lt;/a&gt;链接：&lt;a href=&quot;/wiki/LINQ&quot; title=&quot;LINQ&quot;&gt;LINQ&lt;/a&gt;（链接至&lt;a href=&quot;/wiki/%E8%AF%AD%E8%A8%80%E9%9B%86%E6%88%90%E6%9F%A5%E8%AF%A2&quot; title=&quot;语言集成查询&quot;&gt;语言集成查询&lt;/a&gt;）。&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{noteTA|G1=IT}}&lt;br /&gt;
[[File:ADO NET DSF.png|thumb|320px|right|WCF Data Services 架構圖]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;WCF Data Services&amp;#039;&amp;#039;&amp;#039;，舊稱&amp;#039;&amp;#039;&amp;#039;ADO.NET Data Services Framework&amp;#039;&amp;#039;&amp;#039;（代號&amp;#039;&amp;#039;&amp;#039;Astoria&amp;#039;&amp;#039;&amp;#039;，以下簡稱&amp;#039;&amp;#039;&amp;#039;WCF DS&amp;#039;&amp;#039;&amp;#039;）是基於 [[ADO.NET Entity Framework]] 上的一個簡單&amp;#039;&amp;#039;&amp;#039;資料供應服務&amp;#039;&amp;#039;&amp;#039; (Data Provisioning Services)，也是微軟的 [[REST]] (Representational state transfer) 的解決方案之一。特別為 [[AJAX]]，[[Silverlight]]以及[[Mashup]]應用程式提供資料服務所設計。&lt;br /&gt;
&lt;br /&gt;
目前 ADO.NET DSF 已經內含於 .NET Framework 3.5 Service Pack 1 中。&lt;br /&gt;
&lt;br /&gt;
== 發展背景 ==&lt;br /&gt;
&lt;br /&gt;
以往在發展像是 AJAX 應用程式時，伺服端總是需要設計一個 HTTP 介面端口 (end point)，通常都會使用 [[Web Service]] 來實作，但是隨著 [[Mashup]] 應用程式的成長，若每次都要為一份（或一組）資料撰寫 Web Service 或 HTTP end point 的話，對開發人員也是不小的負擔，而且 Web Service 只支援 XML/SOAP 的資料格式，無法相容於 Mashup 應用程式常用的 [[JSON]] 資料格式，微軟也發現未來的 Silverlight 應用程式也是會面臨到相同問題。&lt;br /&gt;
&lt;br /&gt;
當時剛好微軟的 [[ADO.NET Entity Framework]] 也正在開發中，它的 EDM 能力剛好可以提供給 [[WCF]] 資料存取的能力，因此微軟特別以 ADO.NET Entity Framework 為基礎，開發一個專門提供 HTTP 端點資料服務的資料供應層，即為 WCF DS。&lt;br /&gt;
&lt;br /&gt;
== 架構 ==&lt;br /&gt;
&lt;br /&gt;
WCF DS 由 [[ADO.NET Entity Framework|Entity Framework]] 中的 Entity Data Model (EDM) 為基底，Data Services Framework 的角色就是做為 EDM 的 HTTP 出入口，開發人員可以利用 HTTP 動詞來存取 Data Services Framework，某種程度來說，WCF DS 是由 EDM + WCF 而成的一種資料供應服務，它可以被放在 WCF HTTP 通道，ASP.NET 以及 IIS 中。&lt;br /&gt;
&lt;br /&gt;
WCF DS 的資料來源，可以是 ADO.NET Entity Framework，但如果是來自於其他的資料來源，則可以利用為該資料來源所實作的 [[语言集成查询|LINQ]] Provider（有實作 IQueryable&amp;lt;T&amp;gt; 介面的元件，若要支援更新則必須要再實作  IUpdatable 介面）來做為資料來源亦可。&lt;br /&gt;
&lt;br /&gt;
WCF DS 除了可以將 Entity 公開到 HTTP 通道中，也可以由開發人員自行發展具商業邏輯的自訂函數來回傳資料，以及利用查詢的解譯器 (Query Interceptor) 來將查詢 Entity 的資料做過濾後再回傳。&lt;br /&gt;
&lt;br /&gt;
== 存取方法 ==&lt;br /&gt;
&lt;br /&gt;
WCF DS 開放 EDM 在 HTTP 通道中，因此存取方法都要使用 HTTP 方式，GET/POST/PUT/DELETE 都可以使用，而且每個動詞所代表的意義都不同。&lt;br /&gt;
&lt;br /&gt;
* GET：查詢資料。&lt;br /&gt;
* PUT：更新資料，必須要和 GET 並用，由 GET 抓下資料修改後，用 PUT 更新。&lt;br /&gt;
* POST：新增資料。&lt;br /&gt;
* DELETE：刪除資料。&lt;br /&gt;
&lt;br /&gt;
除了使用 HTTP 動詞以外，WCF DS 另提供了 .NET Client Library 讓 .NET Framework 應用程式可以存取，它也提供了讓 LINQ 可以存取到 WCF DS 的能力（即 LINQ to WCF DS）。&lt;br /&gt;
&lt;br /&gt;
下列為使用 LINQ to WCF DS 的範例：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Data.Services.Client;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using NorthwindModel;&lt;br /&gt;
&lt;br /&gt;
namespace TestApplication&lt;br /&gt;
{&lt;br /&gt;
    class Program&lt;br /&gt;
    {&lt;br /&gt;
        static void Main(string[] args)&lt;br /&gt;
        {&lt;br /&gt;
            NorthwindEntities ctx = new NorthwindEntities(new Uri(&amp;quot;http://localhost:1365/Northwind.svc&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
            var q = from c in ctx.Customers &lt;br /&gt;
                    where c.City == &amp;quot;London&amp;quot;&lt;br /&gt;
                    orderby c.CompanyName&lt;br /&gt;
                    select c;&lt;br /&gt;
&lt;br /&gt;
            foreach (var cust in q)&lt;br /&gt;
            {&lt;br /&gt;
                Console.WriteLine(cust.CompanyName);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
若是使用[[Silverlight]] 2.0開發，則可以使用 .NET Client Library for Silverlight 2.0 來簡化設計，如下：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
NorthwindEntities db = new NorthwindEntities(new Uri(&amp;quot;http://localhost/NorthwindDataServices.svc/&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
var query = from c in db.Employees&lt;br /&gt;
            select c;&lt;br /&gt;
&lt;br /&gt;
AsyncCallback ac = asyncResult =&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
        var queryResult = (query as DataServiceQuery&amp;lt;NorthwindModel.Employees&amp;gt;).EndExecute(asyncResult);&lt;br /&gt;
&lt;br /&gt;
        foreach (var result in queryResult)&lt;br /&gt;
        {&lt;br /&gt;
            TextBlock item = new TextBlock();&lt;br /&gt;
            item.Tag = result.EmployeeID;&lt;br /&gt;
            item.Text = result.FirstName + &amp;quot; &amp;quot; + result.LastName;&lt;br /&gt;
            this.lstEmployeeList.Items.Add(item);&lt;br /&gt;
        }&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
(query as DataServiceQuery&amp;lt;NorthwindModel.Employees&amp;gt;).BeginExecute(ac, null);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 資料格式 ==&lt;br /&gt;
&lt;br /&gt;
在 WCF DS 中，可支援 [[JSON]] (JavaScript Object Notation) 以及 [[Atom (標準)|ATOM]] 兩種資料格式，因此可適用於多數的 [[Mashup]] 或 [[AJAX]] 應用程式。&lt;br /&gt;
&lt;br /&gt;
== 參考資料 ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;references-small&amp;quot;&amp;gt;&lt;br /&gt;
* [http://msdn.microsoft.com/en-us/library/cc668792.aspx MSDN Library: ADO.NET Data Services Framework] {{Wayback|url=http://msdn.microsoft.com/en-us/library/cc668792.aspx |date=20160430041701 }}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Microsoft Cloud Computing Platform}}&lt;br /&gt;
{{Microsoft APIs}}&lt;br /&gt;
{{DotNET}}&lt;br /&gt;
&lt;br /&gt;
[[Category:.NET]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Shawwww</name></author>
	</entry>
</feed>