从JQuery获取WCF服务

时间:2013-05-01 13:00:33

标签: asp.net wcf jquery

我正在尝试向我的Web控件类项目添加WCF服务,并允许我的jquery客户端使用该服务。理想情况下,我想在同一个项目中托管WCF服务,并允许自定义Web控件(在同一个项目中)jQuery方法使用该服务。我不确定我做错了什么,但我无法在jquery调用和服务之间建立连接。虽然没有错误,但我的服务上的断点永远不会到达。这是我做的:

  1. 右键单击项目,然后选择添加
  2. 选择网络服务
  3. 这会创建三个文件:Service1.vb,app.config和IService1.vb
  4. 我编辑的文件看起来像这样:
  5. 服务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的东西,但如果有用的话可以添加它。

    感谢

1 个答案:

答案 0 :(得分:0)

这是您代码中的一个可怕的误解。默认情况下,WCF使用Soap,Javascript / Jquery不提供调用SOAP服务的简单方法。

您应该使用WCF Web HTTP编程模型向非SOAP端点公开WCF服务操作,例如类似REST的服务(可以从JS调用)

我正在使用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听起来像是一个更好的解决方案。