【问题标题】:includeExceptionDetailInFaults=true works in dev-environment, but not in test-environmentincludeExceptionDetailInFaults=true 在开发环境中有效,但在测试环境中无效
【发布时间】:2015-07-15 08:53:47
【问题描述】:

我有 WCF 服务并设置

<serviceDebug includeExceptionDetailInFaults="true" />

当我在开发人员机器上的 Visual Studio 中启动服务器时,这很有效。但它在我们的测试服务器上不起作用。

配置sn-p:

<system.serviceModel>
<behaviors>
  <serviceBehaviors>      
    <behavior name="debug">
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true"  />          
    </behavior>        
  </serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
<services>
  <service name ="TisCalc.Service.UCLCalc" behaviorConfiguration="debug"></service>
</services>

当客户端使用无效请求调用服务器时,我会遇到这样的错误(这就是我想要的)

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
   <s:Body>
      <s:Fault>
         <faultcode xmlns:a="http://schemas.microsoft.com/net/2005/12/windowscommunicationfoundation/dispatcher">a:InternalServiceFault</faultcode>
         <faultstring xml:lang="de-DE">Fehler beim Deserialisieren des Textkörpers der Anforderungsnachricht für Vorgang "Angebot".</faultstring>
         <detail>
            <ExceptionDetail xmlns="http://schemas.datacontract.org/2004/07/System.ServiceModel" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
               <HelpLink i:nil="true"/>
               <InnerException>
                  <HelpLink i:nil="true"/>
                  <InnerException>
                     <HelpLink i:nil="true"/>
                     <InnerException i:nil="true"/>
                     <Message>Instanzvalidierungsfehler: 'AT' ist kein gültiger Wert für Land.</Message>
                     <StackTrace>bei Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderUCLCalcInterface.Read13_Land(String s)
   bei Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderUCLCalcInterface.Read14_Adresse(Boolean isNullable, Boolean checkType)
   bei Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderUCLCalcInterface.Read15_Leasinggeber(Boolean isNullable, Boolean checkType)
   bei Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderUCLCalcInterface.Read16_AngebotContext(Boolean isNullable, Boolean checkType)
   bei Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderUCLCalcInterface.Read33_Item()
   bei Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer.Deserialize(XmlSerializationReader reader)
   bei System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)</StackTrace>
                     <Type>System.InvalidOperationException</Type>
                  </InnerException>
                  <Message>Fehler im XML-Dokument (20,13).</Message>
                  <StackTrace>bei System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
   bei System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle)
   bei System.ServiceModel.Dispatcher.XmlSerializerOperationFormatter.DeserializeBody(XmlDictionaryReader reader, MessageVersion version, XmlSerializer serializer, MessagePartDescription returnPart, MessagePartDescriptionCollection bodyParts, Object[] parameters, Boolean isRequest)</StackTrace>
                  <Type>System.InvalidOperationException</Type>
               </InnerException>
               <Message>Fehler beim Deserialisieren des Textkörpers der Anforderungsnachricht für Vorgang "Angebot".</Message>
               <StackTrace><![CDATA[bei System.ServiceModel.Dispatcher.XmlSerializerOperationFormatter.DeserializeBody(XmlDictionaryReader reader, MessageVersion version, XmlSerializer serializer, MessagePartDescription returnPart, MessagePartDescriptionCollection bodyParts, Object[] parameters, Boolean isRequest)
   bei System.ServiceModel.Dispatcher.XmlSerializerOperationFormatter.DeserializeBody(XmlDictionaryReader reader, MessageVersion version, String action, MessageDescription messageDescription, Object[] parameters, Boolean isRequest)
   bei System.ServiceModel.Dispatcher.OperationFormatter.DeserializeBodyContents(Message message, Object[] parameters, Boolean isRequest)
   bei System.ServiceModel.Dispatcher.OperationFormatter.DeserializeRequest(Message message, Object[] parameters)
   bei System.ServiceModel.Dispatcher.DispatchOperationRuntime.DeserializeInputs(MessageRpc& rpc)
   bei System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
   bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)
   bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41(MessageRpc& rpc)
   bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc& rpc)
   bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc)
   bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc& rpc)
   bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc& rpc)
   bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& rpc)
   bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc& rpc)
   bei System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)]]></StackTrace>
               <Type>System.ServiceModel.CommunicationException</Type>
            </ExceptionDetail>
         </detail>
      </s:Fault>
   </s:Body>
</s:Envelope>

对具有完全相同服务配置和相同来源的测试环境的相同调用返回此错误 500,我完全不知道为什么...

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
      <title>500 - Internal server error.</title>
      <style type="text/css">
         <!--body{margin:0;font-size:.7em;font-family:Verdana, Arial, Helvetica, sans-serif;background:#EEEEEE;}
fieldset{padding:0 15px 10px 15px;} 
h1{font-size:2.4em;margin:0;color:#FFF;}
h2{font-size:1.7em;margin:0;color:#CC0000;} 
h3{font-size:1.2em;margin:10px 0 0 0;color:#000000;} 
#header{width:96%;margin:0 0 0 0;padding:6px 2% 6px 2%;font-family:"trebuchet MS", Verdana, sans-serif;color:#FFF;
background-color:#555555;}
#content{margin:0 0 0 2%;position:relative;}
.content-container{background:#FFF;width:96%;margin-top:8px;padding:10px;position:relative;}-->
      </style>
   </head>
   <body>
      <div id="header">
         <h1>Server Error</h1>
      </div>
      <div id="content">
         <div class="content-container">
            <fieldset>
               <h2>500 - Internal server error.</h2>
               <h3>There is a problem with the resource you are looking for, and it cannot be displayed.</h3>
            </fieldset>
         </div>
      </div>
   </body>
</html>

我必须在 IIS 中进行任何配置吗?我希望有人能给我一个提示。

已编辑:附加信息: 通常我会抛出带有强类型详细信息的Faultexception。 但是我不想为与合同不匹配并在反序列化期间导致错误的请求编写处理程序。例如,如果客户端(如在我的测试请求中)发送无效的enum-value。 在这种情况下,我想要“免费”调试信息。在生产中,此类无效请求不会发生。所以我们可以在生产环境中关闭includeExceptionDetailInFaults

【问题讨论】:

    标签: c# wcf service configuration


    【解决方案1】:

    你不应该使用IncludeExceptionDetailInFaults = true,而是需要抛出FaultException。并且还建议您使用FaultContractAttribute 来设计您的服务以返回强类型 SOAP 错误。

    【讨论】:

    • 嗨!感谢您的回答!通常我会抛出带有强类型详细信息的故障异常。但是我不想为与合同不匹配并在反序列化期间导致错误的请求编写处理程序。例如,如果客户端(如在我的 testrequest 中)发送无效的枚举值。在这种情况下,我想要“免费”调试信息。在生产中,此类无效请求不会发生。所以我们可以在生产环境中关闭includeExceptionDetailInFaults。 *已编辑,因为我按 Enter 而不是 shift+enter... :/
    • @Mike 尝试删除您的服务行为的名称并进行测试以检查它是否真的影响您的端点服务。配置标签 必须是
    • @Ricardo 我删除了 name-attribute 和 behaviorConfiguration-Attribute 并回收了 apppool。没有变化:/我仍然收到错误 500。似乎我的设置没有效果。
    • @Mike 看起来您的 IIS 正在阻止完整消息并发送一般错误 500。尝试在 IIS 中启用详细错误。打开 Internet 信息服务 (IIS) 管理器 > 您的网站 > 错误页面 > 属性并选择详细错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多