2010-12-09 13 views
2

Я работаю над выполнением PUT, POST и DELETE для моего обслуживания. Но каждый раз, когда я пытаюсь отправить json на сервер, получите сообщение об ошибке «Невозможно создать абстрактный класс». Я сгенерировал данные запроса, запустив экземпляр моего объекта через DataContractJsonSerializer, добавив поле __type и обернув его в {"obj": mydata}.POSTING JSON to WCF REST Конечная точка

Я могу запустить это обратно через DataContractJsonSerializer, ожидающей BaseObj и она отлично работает:

{"__type":"RepositoryItem:http:\/\/objects\/","Insert_date":null,"Modified_date":null,"insert_by":null,"last_modify_user_id":null,"modified_by":null, "external_id":"1234","internal_id":54322,"school_id":45,"type_name":0, "vendor_id":57} 

Мой контракт на обслуживание украшен атрибутом ServiceKnownType с RepositoryItem и BaseObj, включенных в список.

Я отправляю с помощью JQuery

 $.ajax({ 
      type: "POST", 
      url: "http://localhost/slnSDK/service.svc/create/repositoryitem.json?t=" + token, 
      data: data, 
      success: function(result) { 
       $("#input").html(result); 
      }, 
      error: function(xhr, result, err) { 
       $("#htmloutput").html(xhr.responseText); 
      }, 
      dataType: "json", 
      contentType: "application/json" 
     }); 

У меня есть следующие конечная точка подвергается:

<OperationContract(Action:=Api2Information.Namespace & "createJson")> _ 
<WebInvoke(Method:="POST", _ 
      BodyStyle:=WebMessageBodyStyle.Bare, _ 
      RequestFormat:=WebMessageFormat.Json, _ 
      responseFormat:=WebMessageFormat.Json, _ 
      UriTemplate:="/create/{objType}.json?t={token}")> _ 
Function createJson(ByVal objType As String, ByVal obj As BaseObj, ByVal token As String) As Integer 

И следующие объекты (IBaseObj была опущена, как это можно судить по его Implementor)

<DataContract(Namespace:="http://objects/")> _ 
Public Class RepositoryItem : Inherits BaseObj 

    ' members backing properties have been omitted. 

    Public Sub New() 
    ... 

    <DataMember()> _ 
    Public Property type_name() As eType 
    ... 

    ' Override this to expose it as a property on the WebAPI 
    <DataMember()> _ 
    Public Overrides Property internal_id() As Integer? 
    ... 

    <DataMember()> _ 
    Public Property external_id() As String 
    ... 

    <DataMember()> _ 
    Public Property vendor_id() As Integer 
    ... 

End Class 

<DataContract(Namespace:="http://objects/")> _ 
<Serializable()> _ 
Public MustInherit Class BaseObj : Implements IBaseObj 

    ' members backing properties have been omitted. 

    <DataMember()> _ 
    Public Overridable Property insert_by() As String Implements IBaseObj.Insert_by 
    ... 

    <DataMember()> _ 
    Public Overridable Property Insert_date() As Nullable(Of Date) Implements IBaseObj.Insert_date 
    ... 

    <DataMember()> _ 
    Public Overridable Property modified_by() As String Implements IBaseObj.Modified_by 
    ... 

    <DataMember()> _ 
    Public Overridable Property Modified_date() As Nullable(Of Date) Implements IBaseObj.Modified_date 
    ... 

    <DataMember()> _ 
    Public Overridable Property last_modify_user_id() As Nullable(Of Integer) Implements IBaseObj.Last_modify_user_id 
    ... 

End Class 

Fiddler мощность от POST:

POST http://localhost/slnSDK/service.svc/create/repositoryitem.json?t= HTTP/1.1 
Host: localhost 
Connection: keep-alive 
Referer: http://localhost/apitest.html 
Content-Length: 265 
Origin: http://localhost 
X-Requested-With: XMLHttpRequest 
Content-Type: application/json 
Accept: application/json, text/javascript, */*; q=0.01 
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) RockMelt/0.8.36.79 Chrome/7.0.517.44 Safari/534.7 
Accept-Encoding: gzip,deflate,sdch 
Accept-Language: en-US,en;q=0.8 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 
Cookie: ASP.NET_SessionId=ywyooz45mi3c4d55h4ld4bec; x=lHOtsYBHvS/fKE7JQWzFTw==; y=XhfNVfYYQynJrIZ/odWFOg== 

{"obj":{"__type":"RepositoryItem:http:\/\/objects\/","Insert_date":null,"Modified_date":null,"insert_by":null,"last_modify_user_id":null,"modified_by":null, "external_id":"1234","internal_id":54322,"school_id":45,"type_name":0, "vendor_id":57}} 

Любая помощь, которую вы можете предоставить, будет отличной. Благодаря!

ответ

1

Хороший объем информации, но всегда сложно отлаживать удаленно, несколько советов:

удаляют стельку наконечник (как я вижу, что вы используете его)

В вашем АЯКС пост :

success: function(result) { 
     $("#input").html(result); 
    }, 

Вы должны использовать result.d, чтобы получить содержимое сообщения.

success: function(result) { 
     $("#input").html(result.d); 
    }, 

Поле insert_by является недействительным в сообщении отладки, из фрагмента он не выглядит как нуль является приемлемым (как String? А не как строки).

+0

Я обновил свое сообщение, чтобы отразить это, но HTTP-запрос был захвачен с использованием Fiddler. Кроме того, спасибо за хедз-ап за возвращаемые данные. – 2010-12-09 14:04:56

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