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