2012-12-17 8 views
7

RESTful hizmetlerinde yeni başlayan biriyim.Bir JSON parametresini RESTful WCF servisine/ile nasıl iletilir ve tüketilir?

İstemcinin 9 parametreye kadar geçmesi gereken bir arabirim oluşturmam gerekiyor.

Parametreleri JSON nesnesi olarak iletmeyi tercih ederim. Örneğin

benim JSON ise:

public Person FindPerson(Peron lookUpPerson) 
{ 
Person found = null; 
// Implementation that finds the Person and sets 'found' 
return found; 
} 

Soru (lar):
nasıl

'{ 
    "age":100, 
    "name":"foo", 
    "messages":["msg 1","msg 2","msg 3"], 
    "favoriteColor" : "blue", 
    "petName" : "Godzilla", 
    "IQ" : "QuiteLow" 
}' 

Ve sonunda aşağıda bir sunucu tarafı yöntemi uygulamak için gerekirse Yukarıdaki JSON dizesiyle istemciden çağrı yapmalı mıyım? Ve

  • çağrıları bir imza ve

    • bu JSON kabul RESTful servis yönteminin uygulanmasını
    • ayrıştırır oluşturup Kişi nesnesi haline deserializes ve nasıl/geri FindPerson yöntemin dönüş değeri döndürür istemci?
  • +0

    Bkz http://stackoverflow.com/questions/13165533/deserialize-json-object-sent-from-android-app-to-wcf-webservice –

    +0

    Hangi dilde hizmet çağırmak kullanıyorsunuz? JavaScript, C#, başka bir şey? – carlosfigueira

    cevap

    9

    Eğer Bu JSON girişini almak için bir WCF işlemi oluşturmak istiyorsanız, o girdiyle eşleşen bir veri sözleşmesi tanımlamanız gerekir. Bunu otomatik olarak yapan bir kaç araç var, bir tane de yazdığım http://jsontodatacontract.azurewebsites.net/ (bu aracın nasıl yazıldığına dair this blog post). Araç, kullanabileceğiniz bu sınıfı oluşturdu:

    Daha sonra, bunu almak için bir işlem sözleşmesi tanımlamanız gerekir. JSON'un istek gövdesine girmesi gerektiğinden, kullanılacak en doğal HTTP yöntemi POST şeklindedir, böylece işlemi aşağıdaki gibi tanımlayabilirsiniz: "POST" ("POST") ve "Bare" ("Bare") şeklindeki yöntem (yani JSON doğrudan parametrelere haritalar). Method ve BodyStyle özelliklerini atlayabildiğinize dikkat edin, çünkü "POST" ve WebMessageBodyStyle.Bare varsayılan değerlerdir).

    [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Bare)] 
    public Person FindPerson(Peron lookUpPerson) 
    { 
        Person found = null; 
        // Implementation that finds the Person and sets 'found' 
        return found; 
    } 
    

    Şimdi, yöntemin en giriş lookupPerson eşleştirilmiş var. Metodunuzun mantığını nasıl uygulayacağınız size kalmış. (JQuery üzerinden) JavaScript kullanarak hizmet çağıran yorum sonra

    bir örneği

    Güncelleme aşağıda bulabilirsiniz.

    var input = '{ 
        "age":100, 
        "name":"foo", 
        "messages":["msg 1","msg 2","msg 3"], 
        "favoriteColor" : "blue", 
        "petName" : "Godzilla", 
        "IQ" : "QuiteLow" 
    }'; 
    var endpointAddress = "http://your.server.com/app/service.svc"; 
    var url = endpointAddress + "/FindPerson"; 
    $.ajax({ 
        type: 'POST', 
        url: url, 
        contentType: 'application/json', 
        data: input, 
        success: function(result) { 
         alert(JSON.stringify(result)); 
        } 
    }); 
    
    +0

    Çok faydalı cevap carlosfigueira! (Ayrıca, tüm parçaları kabaca kapsayacak şekilde Javascript çağrısını ekleyebilirsiniz) Teşekkürler! – pencilCake

    +0

    Bu jquery ajax çağrısının bir JavaScript yerleşik işlev kullanımıyla nasıl değiştirileceğini sordum :) (En son sorum, ilgileniyorsanız :)) – pencilCake

    +0

    http://msdn.microsoft.com/en-us/library adresindeki örnek /vstudio/bb472488(v=vs.100).aspx, XMLHttpRequest nesnesini kullanarak bunu yapmanın bir yolunu gösterir. – carlosfigueira

    1

    <OperationContract()> _ 
         <WebGet(UriTemplate:="YourFunc?inpt={inpt}", BodyStyle:=WebMessageBodyStyle.Wrapped, 
           RequestFormat:=WebMessageFormat.Json, ResponseFormat:=WebMessageFormat.Xml)> _ 
         Public Function YourFunch(inpt As String) As String 
    

    2-Kullanım NewtonSoft/seri (sadece dize alır yukarıdaki edin) nesneye içine json serisini WebGet niteliğini 1-ekleme, NewtonSoft MS serileştiriciye çok daha hızlıdır . seri için

    kullanımı NewtonSoft http://json.codeplex.com/

    3- için .svc dosya Fabrika = "System.ServiceModel.Activation.WebServiceHostFactory

    4- Web.config içerir içerecektir

     <behaviors> 
         <endpointBehaviors> 
         <behavior name="webHttpBehavior"> 
          <webHttp /> 
         </behavior> 
         </endpointBehaviors> 
        </behaviors> 
    

    ... ve ...

    <system.webServer> 
        <modules runAllManagedModulesForAllRequests="true"/> 
        </system.webServer> 
    
    +1

    Bir WCF hizmetine bir JSON girişi iletmek isterseniz, '[WebGet]' özelliğini kullanmamalısınız - giriş istek gövdesinde geçirilmelidir, bu nedenle GET bunun için kullanılmamalıdır. Bunun yerine '[WebInvoke]' kullanmalıdır. – carlosfigueira

    İlgili konular