在服务器上启用IncludeExceptionDetailInFaults(来自ServiceBehaviorAttribute或来自<serviceDebug>配置行为)

Tre*_*vor 154 c# wcf exception wcf-data-services

我有一个完美的WCF服务,有些东西已经改变,我不知道是什么.

我得到这个例外:

System.ServiceModel.FaultException:由于内部错误,服务器无法处理请求.有关错误的更多信息,请在服务器上启用IncludeExceptionDetailInFaults(来自ServiceBehaviorAttribute或配置行为)以将异常信息发送回客户端,或者根据Microsoft .NET Framework 3.0 SDK文档打开跟踪并检查服务器跟踪日志.

这很令人困惑,因为我正在运行.NET 4.0.

我在哪里开IncludeExceptionDetailInFaults?我正在努力寻找它.

Oti*_*iel 258

在文件中定义行为.config:

<configuration>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="debug">
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    ...
  </system.serviceModel>
</configuration>
Run Code Online (Sandbox Code Playgroud)

然后沿着以下行将行为应用于您的服务:

<configuration>
  <system.serviceModel>
    ...
    <services>
      <service name="MyServiceName" behaviorConfiguration="debug" />
    </services>
  </system.serviceModel>
</configuration>
Run Code Online (Sandbox Code Playgroud)

您也可以通过编程方式进行设置.看到这个问题.

  • 注意:VS2013将<serviceDebug>标记放在默认的Web.config中,并将其设置为false.如果您没有注意到我没有注意到并且上面添加了XML,那么文件中最后的内容就是胜利.希望这对那里的人有用. (3认同)
  • @AkshayKulkarni:不确定,我对你的案子没有经验.确保您的服务首先引用serviceBehavior(检查**gagogra**回答).如果这不能解决问题,请在SO上提问. (2认同)

Ric*_*lly 62

它位于app.config文件中.

<configuration>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceDebug includeExceptionDetailInFaults="true"/>
Run Code Online (Sandbox Code Playgroud)

  • 如果您希望将其应用于所有服务,请不要设置<behavior>的名称属性(如@Otiel答案中所示). (8认同)

Yan*_*ang 45

如果您想通过代码执行此操作,可以添加如下行为:

serviceHost.Description.Behaviors.Remove(
    typeof(ServiceDebugBehavior));
serviceHost.Description.Behaviors.Add(
    new ServiceDebugBehavior { IncludeExceptionDetailInFaults = true });
Run Code Online (Sandbox Code Playgroud)


小智 24

您也可以在继承接口的类声明上方的[ServiceBehavior]标记中进行设置

[ServiceBehavior(IncludeExceptionDetailInFaults = true)]
public class MyClass:IMyService
{
...
}
Run Code Online (Sandbox Code Playgroud)

Immortal Blue在公开发布的版本中没有公开exeption详细信息是正确的,但出于测试目的,这是一个方便的工具.释放时始终关闭.