2009-03-02 21 views
8

Buduję usługę WCF na podstawie specyfikacji W3C, która definiuje punkt końcowy usługi RESTful, który akceptuje dane posta "application/x-www-form-urlencoded". WCF nie obsługuje tego rodzaju kodowania wiadomości domyślnie i znalazłem kilka różnych przykładów tworzenia kontrakt, który wygląda tak:Najlepszy sposób obsługi danych postów "application/x-www-form-urlencoded" za pomocą WCF?

XElement Query_Post(Stream postData); 

a następnie w odniesieniu do realizacji dekodowania strumienia postData używając metody HttpUtility.ParseQueryString .

Czy ktoś wie o znacznie silniejszym typie obsługi "application/x-www-form-urlencoded" w WCF?

Chciałbym mój kontrakt operacja się:

XElement Query_Post(string query, string [] params); 
+3

Fakt, że 24 godziny później nikt nie wie, jak zrobić to, co powinno być tak podstawową myślą, powinien wskazywać, że WCF nie jest najlepszą platformą do budowania spokojnych rzeczy. Wypróbuj OpenRasta, uważam, że ma wbudowany kodek do obsługi danych zapisanych w formacie x-www-urlen. –

Odpowiedz

7

Najlepszym sposobem jest użycie Stream jak Raw HTTP POST with WCF lub co mówisz. Powodem jest to, że WCF usuwa cały układ fizyczny na poziomie komunikacji z kodu serwisowego. Najlepiej byłoby, gdybyś zrobił usługę, która może zmienić się w SOAP lub REST, po prostu przełączając przełącznik.

Aby wesprzeć to natywnie, prawdopodobnie musisz przedłużyć WebHttpBinding lub utworzyć własne powiązanie i zaimplementować custom encoder. Jest to symetryczne w stosunku do danych wyjściowych, tak jak w przypadku postu połączonego. Musisz przekręcić ramiona, aby WCF wyprowadzał rzeczy inne niż XML/JSON.

+0

Czy masz przykład z niewidocznym linkiem? –

2

WCF REST Contrib biblioteka pozwala tej funkcji:

https://github.com/mikeobrien/WcfRestContrib

Obejmuje ona POX formater i forma url zakodowany formatowania i pozwala łatwo tworzyć własne. Formatery są odwzorowywane na typy MIME i automatycznie wybierane w celu serializacji/deserializacji treści obiektu na podstawie typu zawartości i nagłówków akceptacji.

+0

Rewalowano, ponieważ adres URL jest zepsuty ... – ewitkows

+0

Ta odpowiedź to szef 6 lat. – hcoverlambda

+0

I to już nie zapewnia żadnej pomocy szefowi – ewitkows