2012-12-10 12 views
8

Tworzę serwis internetowy WCF, którego żądania/odpowiedzi mają być tylko podpisane. Do tego atrybutu na ServiceContract Mam ustawionyDlaczego odpowiedzi SoapFault WCF są szyfrowane w niektórych sytuacjach?

ProtectionLevel = ProtectionLevel.Sign 

To działa OK.

Ze względu na wymagania niektóre produkty SoapFault powinny zostać wyrzucone z serwisu; dwa rodzaje SoapFaults:

  • związane ze stosowaniem
  • związanych z WS-Addressing (np MessageID brakuje)

Do tego używam normalnego podejścia do czynienia z SoafFaults: Tworzenie IErrorHandler, w którym tworzona jest instancja Message z MessageFault.CreateFault.

Prawie wszystkie zwrócone błędy SoapFault nie są zaszyfrowane (co jest dla mnie w porządku), moje pytanie jest, dlaczego te z action = "http://www.w3.org/2005/08/addressing/fault" lub "http://www.w3.org/2005/08/addressing/soap/fault" są zaszyfrowane?

+0

Skąd wiadomo, że jest zaszyfrowana? czy możesz podać przykładową odpowiedź? – esskar

+0

Wiem, że jest zaszyfrowany, ponieważ przeglądam go za pomocą SvcTraceViewer (po stronie klienta). – csg

+0

@csg dowiedziałeś się, dlaczego? Mam dokładnie ten sam problem. –

Odpowiedz

0

Zapoznaj się z http://msdn.microsoft.com/en-us/library/aa347791.aspx i http://msdn.microsoft.com/en-us/library/system.servicemodel.faultcontractattribute.aspx. Stwierdza, że ​​

Jeśli wybierzesz wiążącą, która umożliwia zabezpieczenie i nie ustawić właściwość ProtectionLevel gdziekolwiek na umowie, wszystkie dane aplikacyjne zostaną zaszyfrowane i podpisane.

Domyślnie typy kompilacji używają tego zachowania. Możesz to sprawdzić, sprawdzając, który wyjątek został faktycznie zgłoszony.

+0

Poziom ochrony ustalany jest na poziomie umowy z: [ServiceContract (ProtectionLevel = ProtectionLevel.Sign)] – csg

Powiązane problemy