Setzen Sie IncludeExceptionDetailInFaults im Code für WCF auf true

73

Wie setze ich IncludeExceptionDetailInFaults im Code, ohne App.Config zu verwenden?

Josh
quelle

Antworten:

108

Ja, sicher - auf der Serverseite, bevor Sie den Service-Host öffnen. Dies würde jedoch erfordern, dass Sie den WCF-Dienst selbst hosten - funktioniert in IIS-Hosting-Szenarien nicht:

ServiceHost host = new ServiceHost(typeof(MyWCFService));

ServiceDebugBehavior debug = host.Description.Behaviors.Find<ServiceDebugBehavior>();

// if not found - add behavior with setting turned on 
if (debug == null)
{
    host.Description.Behaviors.Add(
         new ServiceDebugBehavior() { IncludeExceptionDetailInFaults = true });
}
else
{  
    // make sure setting is turned ON
    if (!debug.IncludeExceptionDetailInFaults)
    {
        debug.IncludeExceptionDetailInFaults = true;
    }
}

host.Open();

Wenn Sie beim IIS-Hosting dasselbe tun müssen, müssen Sie Ihren eigenen benutzerdefinierten MyServiceHostNachkommen und einen geeigneten Nachkommen erstellen MyServiceHostFactory, der einen solchen benutzerdefinierten Service-Host instanziiert, und in Ihrer * .svc-Datei auf diese benutzerdefinierte Service-Host-Factory verweisen.

marc_s
quelle
3
Rettete mein Leben auf einer lokalen Named Pipes WCF-Anwendung im Vergleich zum laufenden Dienst. Vielen Dank !
Larry
34

Sie können es auch im Tag [ServiceBehavior] über Ihrer Klassendeklaration festlegen, die die Schnittstelle erbt

[ServiceBehavior(IncludeExceptionDetailInFaults = true)]
public class MyClass:IMyService
{
...
}
LievenV
quelle