2012-12-10 6 views
8

Ich erstelle einen WCF-Webservice, dessen Anfragen/Antworten nur signiert werden sollen. Dazu auf Servicecontract Attribut Ich habeWarum WCF SoapFault-Antworten in einigen Situationen verschlüsselt sind?

gesetzt
ProtectionLevel = ProtectionLevel.Sign 

Das funktioniert ok.

Aufgrund von Anforderungen sollen einige SoapFaults aus dem Dienst geworfen werden; zwei Arten von SoapFaults:

  • zu anwendungsbezogenen
  • zu verwandten WS-Addressing (zB MessageID fehlt)

Dafür ich den normalen Ansatz bin mit mit SoafFaults Umgang: Erstellen Sie ein IErrorHandler, in dem eine Message-Instanz mit MessageFault.CreateFault erstellt wird.

Fast alle zurückgegebenen SoapFaults sind nicht verschlüsselt (was für mich in Ordnung ist), meine Frage ist, warum die mit action = "http://www.w3.org/2005/08/addressing/fault" oder "http://www.w3.org/2005/08/addressing/soap/fault" sind verschlüsselt?

+0

woher wissen Sie, dass es verschlüsselt ist? Können Sie eine Beispielantwort geben? – esskar

+0

Ich weiß, ist verschlüsselt, weil ich es mit SvcTraceViewer (auf der Client-Seite) anzeigen. – csg

+0

@csg hast du herausgefunden warum? Ich habe genau das gleiche Problem. –

Antwort

0

Auschecken http://msdn.microsoft.com/en-us/library/aa347791.aspx und http://msdn.microsoft.com/en-us/library/system.servicemodel.faultcontractattribute.aspx. Es besagt, dass

Wenn Sie wählen Sie eine Bindung, die Sicherheit ermöglicht und Sie nicht setzen die Protectionlevel-Eigenschaft überall auf dem Vertrag, alle Anwendungs ​​ Daten werden verschlüsselt und signiert.

Ich vermute, dass die Build-Typen standardmäßig dieses Verhalten verwenden. Sie können dies überprüfen, indem Sie sich ansehen, welche Ausnahme tatsächlich ausgelöst wird.

+0

Die Schutzstufe wird auf der Vertragsebene mit festgelegt: [ServiceContract (ProtectionLevel = ProtectionLevel.Sign)] – csg

Verwandte Themen