0

我正在尝试将 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

服务1

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 的内容,但如果有帮助可以添加。

谢谢

4

1 回答 1

0

这是您的代码中的一个可怕的误解。默认情况下,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

服务1.svc

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

我不会在这里向您解释所有内容,并继续阅读此处或使用此示例

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

于 2013-05-01T18:35:10.670 回答