【问题标题】:Consume WCF service from JQuery从 JQuery 使用 WCF 服务
【发布时间】:2013-05-01 13:00:33
【问题描述】:

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

  1. 右键单击项目并选择添加
  2. 选择网络服务
  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 的内容,但如果有帮助可以添加。

谢谢

【问题讨论】:

    标签: asp.net wcf jquery


    【解决方案1】:

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

    您应该使用 WCF Web HTTP 编程模型将 WCF 服务操作公开给非 SOAP 端点,例如类似 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" %>
    

    我不会在这里解释一切,继续阅读hereexample

    还请注意,由于 ASP.NET Web Api,WCF REST 现在不太流行。我不认为 WCF REST 已被弃用,但要在 Web 上公开某些内容,Web Api 听起来是一个更好的解决方案。

    【讨论】:

    • 感谢您的回复。当我按照您的建议创建服务时,没有创建 svc 文件。这是我应该创建为文本文件并重命名的东西吗?
    • 是的,但是在WCF新建项模板中,这个文件是自动的
    • 好的,我想我明白了。两件事情。首先,我看到您在 Service1.SVC 中有“Service="MvcApplication2.Service1"。我没有使用 MVC(这是在服务器控件中)。它应该只是服务的全名,即:com。 jason.Service1?其次,我如何在我的 jqeury 中访问它?特别是在 jQuery 中?
    • 没问题。 WCF 适用于 MVC 或 WebForms。您必须在 Web 编程模型中使用 Http 绑定才能在 Jquery 中调用它。该脚本与您之前的脚本非常相似。查看我的链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-10
    • 1970-01-01
    • 2015-02-13
    • 1970-01-01
    相关资源
    最近更新 更多