2013-05-01 216 views
0

我想向我的Web控件類項目添加一個WCF服務,並允許我的jQuery客戶端使用該服務。理想情況下,我想在同一個項目中託管WCF服務,並允許自定義Web控件(在同一項目中)jQuery方法使用該服務。我不確定我做錯了什麼,但我無法在jquery調用和服務之間建立連接。儘管沒有錯誤,但我的服務中斷點始終沒有達到。下面是我做的:從JQuery消費WCF服務

  1. 右鍵單擊項目,然後選擇添加
  2. 選擇Web服務
  3. 這將創建三個文件:Service1.vb,App.config,並將IService1.vb
  4. 我編輯這些文件看起來像這樣:

服務1

Public Class Service1 
    Implements IService1 

    Public Function getUsers(ByVal prefixText As String) As List(Of String) Implements IService1.getUsers 
     Dim myList As New List(Of String) 
     With myList 
      .Add("Some String") 
      .Add("Another String") 
     End With 

     Return myList 
    End Function 
End Class 

IService1

Imports System.ServiceModel 

<ServiceContract()> 
Public Interface IService1 

    <OperationContract()> _ 
    Function getUsers(ByVal prefixText As String) As List(Of String) 

End Interface 

然後我嘗試用下面的jQuery來調用它:

$.ajax({ 
     type: "POST", 
     url: 'Service1.vb/getUsers',   
     data: '{"prefixText":"' + getText + '"}', 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (msg) { 
      alert("success") 

     }, 
     error: function (e) { 
      alert("Failed") 
     } 
    }); 

正如我所說的,是從來沒有達到我的getUsers函數斷點和jQuery的成功/失敗警報永遠不會提出。如果有人能告訴我如何訪問服務和/或如何警告我的jQuery中的錯誤,我會很感激。我遺漏了app.config的東西,但可以添加它,如果它會有所幫助。

謝謝

回答

0

這是在你的代碼中的一個可怕的誤解。默認情況下,WCF使用Soap和Javascript/Jquery不提供調用SOAP服務的簡單方法。

您應該使用WCF的Web HTTP編程模型公開給非SOAP端點WCF服務操作,就像一個REST式服務(可從JS調用)

IY您正在使用WCF 4,這是相當簡單。

服務合同

<ServiceContract()> 
Public Interface IService1 

    <OperationContract()> 
    <WebInvoke(BodyStyle:=WebMessageBodyStyle.Bare, RequestFormat:=WebMessageFormat.Json, ResponseFormat:=WebMessageFormat.Json)> 
    Function getUsers() As List(Of String) 

End Interface 

服務實現

Public Class Service1 
    Implements IService1 

    Public Function getUsers(ByVal prefixText As String) As List(Of String) Implements IService1.getUsers 
     Dim myList As New List(Of String) 
     With myList 
      .Add("Some String") 
      .Add("Another String") 
     End With 

     Return myList 
    End Function 

End Class 

Service1.svc

<%@ ServiceHost Language="VB" 
Service="MvcApplication2.Service1" 
CodeBehind="Service1.svc.vb" 
Factory="System.ServiceModel.Activation.WebServiceHostFactory" %> 

我禾不解釋你在這裏的一切,並繼續閱讀here或與此example

另請注意,由於ASP.NET Web Api,WCF REST今天不太受歡迎。我不相信WCF REST已被棄用,但爲了暴露Web上的某些內容,Web Api聽起來像是一個更好的解決方案。

+0

感謝您的回覆。當我按照你的建議創建我的服務時,沒有創建svc文件。這是我應該創建一個文本文件並重命名嗎? – jason 2013-05-06 13:24:29

+0

是的,但在WCF新的項目模板中,這個文件是自動的 – Cybermaxs 2013-05-06 14:02:34

+0

好吧,我想我得到這個。兩件事情。首先,我看到Service1.SVC中有「Service =」MvcApplication2.Service1「。我沒有使用MVC(這是在服務器控件中)。它應該是服務的全名,IE:com。 jason.Service1?第二,我如何在jqeury中訪問它?特別是在jQuery? – jason 2013-05-06 14:22:14