WCF с поддержкой Ajax: данные не получены - PullRequest
0 голосов
/ 05 марта 2011

Я новичок в WCF, поэтому, пожалуйста, потерпите меня.

У меня есть простой сервис WCF, принимающий простые данные JSON, такие как {name: "Joe Boxer"}. Следует просто повторить переданное имя.


Imports System.ServiceModel
Imports System.ServiceModel.Activation
Imports System.ServiceModel.Web
Imports System.Runtime.Serialization

<ServiceContract(Namespace:="")>
<AspNetCompatibilityRequirements(RequirementsMode:=AspNetCompatibilityRequirementsMode.Allowed)>
Public Class Service

    <Serializable()> _
    <DataContract(Name:="Person")> _
    Public Class Person
        <DataMember(IsRequired:=True, Name:="Name")> _
        Public Name As String
    End Class

    <OperationContract()>
    <WebInvoke(requestformat:=WebMessageFormat.Json)>
    Public Function GetName(ByVal p As Person) As String
        Return "Your name is " & p.Name
    End Function

End Class

Итак, я использовал JQuery AJAX и JSON2 для выполнения POST в WCF. Я могу видеть с помощью firebug переданные данные JSON. Однако метод GetName () всегда не может видеть переданные данные, что приводит к сбою кода, поскольку p равно нулю.

Похоже, что эта служба не может видеть переданные данные.

Что мне не хватает? Заранее благодарю за помощь.

Спасибо Прадипу за ваш ответ.

Я на самом деле отправляю сложный тип. Извините, если не дали понять. Вот как я его отправляю (упрощенно).

$.ajax( { 
url: "http://localhost/wcftest/service.svc/GetName",
data: JSON.stringify({name:"Joe Boxer"}),
type: "POST",
processData: false,
contentType: "application/json; charset=UTF-8",
timeout: 10000,
dataType: "json", 
success: function(res) { alert(res); },
error:  function() { alert("error"); return;} 
}); 

Я вижу в firebug {"name": "Joe Boxer"} отправляется. Но функция все еще не видит это. Я, вероятно, пропускаю что-то действительно маленькое, но я не знаю что. Я играл с этим весь день.

Ответы [ 2 ]

0 голосов
/ 30 мая 2011

Я думаю, что ваша проблема в разборе JSON с учетом регистра, и вы передаете «имя» от клиента, в то время как у вашего DataMemberAttribute есть «Имя».Попробуйте изменить одну или другую сторону, чтобы они соответствовали регистру.

0 голосов
/ 05 марта 2011

Данные, которые вы отправляете от клиента, неверны.Вы просто публикуете строку.В WCF вы не ожидаете строку, но ожидаете сложного типа (Person). Отправьте структуру Person, и тогда ваш WCF должен выполнить эту работу.

using-complex-types-to-to-make-call-services-менее-complex должно помочь вам достичь того, что вы хотите сделать.НТН

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...