2010-08-26 88 views
2

我已經在我的應用程序中創建了WCF服務,涉及LINQ概念,但我無法理解如何將該服務調用到我的網頁。可以有人告訴我如何調用服務我已經爲我的申請創建了詳細的步驟以及一些示例編碼以便我可以繼續進行下去?提前致謝。WCF服務隨LINQ to SQL在asp.net

+0

你想從類背後的代碼或瀏覽器(AJAX)調用服務嗎?你在哪裏主持服務? – 2010-08-26 12:38:46

回答

1

下面是一個示例,我將它們放在一起展示如何調用WCF RESTful服務,該服務使用jQuery的$.ajax函數從基本Web頁面返回LINQ的結果。無論您是從LINQ返回對象還是從LINQ到SQL,基本概念都應該是相同的 - 我使用基本的LINQ到對象來說明這一點。


這裏的WCF服務(Service2.svc.cs):

[ServiceContract(Namespace = "")] 
[AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed)] 
public class Service2 
{ 
    public static List<string> myValues = new List<string>() 
    { 
     "Apple", "Orange", "Apricot", "Banana", "Grape", "Peach", "Plum" 
    }; 

    [OperationContract] 
    [WebGet(UriTemplate="Filter?q={filter}", 
     ResponseFormat=WebMessageFormat.Json)] 
    public IEnumerable<string> FilterList(string filter) 
    { 
     var items = from v in myValues 
        where v.StartsWith(filter) 
        select v; 

     return items; 
    } 

這是一個使用LINQ返回只在我List<string>與傳遞的字母開頭的那些元素的簡單服務所以如果你通過'P',你得到「桃子」和「梅花」作爲IEnumerable<string>返回。

此服務設置爲由於使用WebGet屬性而從GET請求返回數據。這表明此方法只能通過HTTP GET請求調用。服務方法設置爲以JSON格式返回數據(比XML更流線,但不可擴展)。由於WebGet屬性的ResponseFormat=WebMessageFormat.Json設置,所以這樣設置。

當我調用此方法從我的應用程序(!或瀏覽器),並通過在字母「P」爲我的濾波器參數,我到客戶端的響應是這樣的(通過小提琴手):
["Peach","Plum"]

這是返回的簡單的JSON註釋數組。然後我可以使用這個返回的數據來做任何事情。

另請注意,我並不需要將IEnumberable<string>轉換爲JSON格式 - WCF的內置JSON序列化程序對我來說是這樣的。

編輯:你可以代替我簡單的LINQ到對象與LINQ到SQL查詢,並會與其他一切不變:

public IEnumerable<string> FilterList(string filter) 
{ 
    DbTest1DataContext context = new DbTest1DataContext(); 
    var names = from n in context.Attendees 
       where n.Name.StartsWith(filter) 
       select n.Name; 

    return names; 
} 

DbTest1DataContext是我的LINQ-TO- SQL上下文指向具有帶名稱列的參加者表的數據庫。此答案中的其他內容保持不變(web.config,HTML,jQuery等)。


這裏是我的web.config文件服務(的web.config):

<system.serviceModel> 
    <behaviors> 
     <endpointBehaviors> 
     <behavior name="WcfRestService1.Service2AspNetAjaxBehavior"> 
      <webHttp /> 
     </behavior> 
     </endpointBehaviors> 
    </behaviors> 
    <services> 
     <service name="WcfRestService1.Service2"> 
     <endpoint address="" behaviorConfiguration="WcfRestService1.Service2AspNetAjaxBehavior" 
      binding="webHttpBinding" contract="WcfRestService1.Service2" /> 
     </service> 
    </services> 
    </system.serviceModel> 

這是非常標準的,超出現成的配置除了端點的行爲,我已經設置使用webHttp


這是我的客戶端代碼(TestService。HTM):

<html> 
    <head> 
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js"></script>  
    <script type="text/javascript"> 
     $(document).ready(function() { 
      $("#sendit").click(function (e) { 
       e.preventDefault(); 
       $.ajax({ 
        url: "Service2.svc/Filter", 
        data: { q: $("#source").val() }, 
        type: "GET", 
        dataType: "json", 
        success: function (data) { 
         var theResults = $("#results"); 
         theResults.empty(); 
         $.each(data, function (i, item) { 
          theResults.append("<li>" + item + "</li>"); 
         }); 
        }, 
        error: function (x, t, m) { alert(t + " :: " + m); } 
       }); 
      }); 
     }); 
    </script> 
    </head> 
    <body> 
     <div> 
      Starts with: <input id="source" type="text" /> 
      <button id="sendit">Send It</button> 
     </div> 
     <div> 
      <ul id="results"> 
      </ul> 
     </div> 
    </body> 
</html> 

這是一個非常簡單的頁面,需要從一個文本框(ID =源),並單擊按鈕(ID = sendit)後的輸入,它會調用我的WCF RESTful服務。我爲此使用了jQuery,但是您可以看到我將過濾器值傳遞給$.ajax調用的數據屬性(data: { q: $("#source").val() }),我將其設置爲GET請求(type: "GET"),因爲這就是我配置了服務。我期望得到的數據類型是JSON(dataType: "json")。如果我的服務調用成功,我調用我的成功處理函數,然後將返回的字符串添加到<ul>元素中。

希望這會爲您從LINQ查詢中檢索一組值並將其發送到基於Web的客戶端提供一個很好的起點。請讓我知道是否有更多問題,我會相應地更新我的答案。

希望這會有所幫助!