2011-12-10 10 views
5

Konfiguruję nową usługę WCF .NET 4.0 za pomocą metody (operacji), która przyjmuje parametry typów generowanych przez XSD jako parametry. Sprawia to, że rzeczy są czyste i uporządkowane dla klienta - klient może pracować z silnymi typami i nie musi myśleć o XML.Uzyskaj surowy kod XML parametrów w implementacji usługi WCF

Jednak w implementacji usługi WCF wolałbym traktować dane parametrów jako dokumenty XML (LINQ XDocument) zamiast deserializowanych typów obiektów. Fajnie, że WCF będzie deserializować do typów jawnych, ale dla mojego generycznego algorytmu jest wygodniejsze i bardziej elastyczne radzenie sobie z dokumentami xml, głównie dlatego, że przychodzące dane są polimorficzne.

Wiem, że mogę po prostu wziąć obiekty parametrów i serializować je z powrotem do XML, ale wydaje się to marnotrawstwem.

Rozumiem, że prawdopodobnie mógłbym zastąpić mocno wpisane parametry XElement, aby uzyskać to, co chcę dla wygody implementacji, ale straci to zalety silnego pisania (sprawdzania kompilatora, intellisense, własnej dokumentacji) dla klienta.

Czy jest jakiś sposób, aby powiedzieć WCF, że w mojej implementacji usługi nie potrzebuję zderializowanych obiektów parametrów, że chcę je jako XML zamiast?

Czy istnieje sposób uzyskania dostępu do nieprzetworzonego kodu XML tych parametrów, tak jak przed przekształceniem ich w obiekty WCF? Jeśli nie mogę uniemożliwić WCF spędzania czasu na deserializacji obiektów, przynajmniej pozwoliłoby to na uniknięcie kosztów ponownego ich przywrócenia do formatu XML.

+0

Nadal uważam, że naprawdę warto kłopotów, dlaczego nie przyspieszyć serailization i deserilazation. –

+0

@SurjitSamra Nie rozumiem twojego komentarza. Mówisz, że WCF nie jest warte kłopotów, czy moje zainteresowanie dostępem do surowego XML nie jest warte kłopotów? Nie mogę zrobić nic, jeśli chodzi o przyspieszenie serializacji lub deserializacji, poza unikaniem niepotrzebnych podróży w obie strony. – dthorpe

+0

Przepraszam, że nie było jasne, w moim komentarzu, rzeczywiście chodzi o to, że uzyskanie dostępu do surowego XML jest warte kłopotów? WCF jest warte każdego kłopotu :), niedawno przeprowadziłem migrację ponad 10-letniego .NET remotującego distrubuted system w WCF, istnieje ciężka niestandardowa serializacja/deserializacja, aby przyspieszyć wszystko, jeśli używasz jakiegoś rodzaju zastrzyków np. Jeden marc_s powiedział w swoim ans wtedy dowiesz się, jak długo wszystko zajmuje wszystko, w moim przypadku byłem szczęśliwy, że deserializacja zajęła tylko <30 ms. –

Odpowiedz

3

Jednym ze sposobów na wykonanie tego byłoby utworzenie pliku message inspector, który sprawdzałby przychodzącą wiadomość na serwerze i działał na niej (np. Przechowywał ją lub coś w tym stylu).

Pablo Pialorsi ma great blog post on how to write a message inspector, krok po kroku

Kontrolowanie wiadomość da Ci dostęp do parametrów w formacie raw komunikatów SOAP.

Pomyślałem, że może lepszym wyborem będzie inspektor parametrów, ale wygląda na to, że ci inspektorzy uzyskują dostęp do parametrów dla wszystkich wywołań serwisowych, po tym, jak te parametry zostały przekształcone w postaci deserializacji na obiekty już istniejące, więc to nie brzmi jak realistyczne podejście ...

+0

Interesujące.Zbadam, dzięki. – dthorpe