2013-05-01 4 views
0

Я пытаюсь добавить службу WCF в свой проект класса веб-управления и разрешить клиенту jquery использовать эту службу. В идеале я хочу разместить службу WCF в том же проекте и разрешить использование пользовательского веб-элемента управления (внутри одного и того же проекта) метод jQuery. Я не уверен, что я делаю неправильно, но я не могу установить связь между вызовом jquery и службой. Несмотря на отсутствие ошибки, точка останова на моем сервисе никогда не достигается. Вот что я сделал:Использовать службу WCF от JQuery

  1. Щелкните правой кнопкой мыши на проекте и выберите Добавить
  2. Select Web Service
  3. Это создает три файла: Service1.vb, app.config и IService1.vb
  4. Я редактировал файлы выглядеть следующим образом:

Service1

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 Programming Model подвергать WCF операции службы к не-SOAP конечных точек, как 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 

Внедрение Service

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" %> 

I чюо не объясняйте вам все здесь и продолжайте читать here или с этим example

Также обратите внимание, что WCF REST сегодня менее популярен из-за ASP.NET Web Api. Я не верю, что WCF REST устарел, но для того, чтобы разоблачить что-то в Интернете, Web Api звучит как лучшее решение.

+0

Спасибо за ваш ответ. Когда я создаю свой сервис, как вы полагаете, файл svc не создается.Это что-то я должен просто создать как текстовый файл и переименовать? – jason

+0

Да, но в шаблоне новых элементов WCF этот файл автоматически – Cybermaxs

+0

Хорошо, я думаю, что получаю это. Две вещи. Во-первых, я вижу, что в Service1.SVC есть «Service =« MvcApplication2.Service1 ». Я не использую MVC (это в серверном элементе управления). Должно ли это просто полное имя службы, IE: com. jason.Service1? Во-вторых, как мне получить доступ к этому в моем jqeury? В частности, в jQuery? – jason

Смежные вопросы