在 WCF 代码中将 IncludeExceptionDetailInFaults 设置为 true

问题描述 投票:0回答:3

如何在不使用 App.Config 的情况下在代码中设置 IncludeExceptionDetailInFaults?

c# wcf
3个回答
110
投票

是的,当然 - 在服务器端,在打开服务主机之前。但是,这需要您自行托管 WCF 服务 - 在 IIS 托管方案中不起作用:

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();

如果您需要在 IIS 托管中执行相同的操作,则必须创建自己的自定义

MyServiceHost
后代和合适的
MyServiceHostFactory
来实例化此类自定义服务主机,并在您的*.svc 文件。


35
投票

你也可以在继承接口的类声明上方的[ServiceBehavior]标签中设置

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

0
投票

对我来说,这种方式可以包含异常详细信息:

            builder.AddService<CustomerService>((serviceOptions) =>
            {
                serviceOptions.BaseAddresses.Add(new Uri($"http://{HOST_IN_WSDL}/CustomerService.svc"));
                //serviceOptions.BaseAddresses.Add(new Uri($"https://{HOST_IN_WSDL}/CustomerService"));
                serviceOptions.DebugBehavior.IncludeExceptionDetailInFaults = true;
            })

            .AddServiceEndpoint<CustomerService, ICustomerService>(myWSHttpBinding, "");
© www.soinside.com 2019 - 2024. All rights reserved.