【问题标题】:Cant get info from FaultExceptions (javascript)无法从故障异常 (javascript) 中获取信息
【发布时间】:2011-07-03 15:24:24
【问题描述】:

到目前为止,我一直使用从 javascript 调用的 Web 服务 ASMX。它一直运行良好,但是因为我需要对序列化进行一些控制,所以我正在尝试切换到 DataContracts 和 WCF。 但是,我确实相信我误解了一些东西,因为我试图从客户端代码(javascript)中捕获错误异常,但我收到的唯一错误代码是: (已翻译,所以可能不准确)

“由于实习生错误,服务器无法处理请求。您可以通过激活 IncludeExceptionDetailInFaults 来获取有关该错误的更多信息...”

我试图将 IncludeExceptionDetailInFauls 设置为 true 以提供一些信息,但据我所知,抛出 FaultExceptions 的全部意义在于向用户隐藏异常,并且只抛出一些信息?我正在尝试使用 IErrorHandler,但我有 创建了一个更简单的示例:

SVC:

[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class WcfTest
{
    // To use HTTP GET, add [WebGet] attribute. (Default ResponseFormat is WebMessageFormat.Json)
    // To create an operation that returns XML,
    //    add [WebGet(ResponseFormat=WebMessageFormat.Xml)],
    //    and include the following line in the operation body:
    //        WebOperationContext.Current.OutgoingResponse.ContentType = "text/xml";
    [OperationContract]
    public string DoOk()
    {
        // Add your operation implementation here
        return "Success";
    }
    [OperationContract]
    public string DoFail()
    {
        FaultReason reason = new FaultReason("Fail <- This is good :)");
        throw new FaultException(reason);
        return "Success";
    }
}

包含在脚本管理器中,由以下 javascript 调用:

<a href="java script:void(0);" onclick="DoOk()">OK</a><br />
        <a href="java script:void(0);" onclick="DoFail()">Fail</a>
        <script>
            function DoOk() {
                WcfTest.DoOk(
                    function (result) {
                        alert("DoOk Success: "+result);
                    },
                    function (result) {
                        alert("DoOk Failed: " + result);
                    })
            }
            function DoFail() {
                WcfTest.DoFail(
                    function (result) {
                        alert("DoFail Success: " + result);
                    },
                    function (result) {
                        alert("DoFail Failed: " + result);
                    })        
            }
        </script>

和服务模型:

<system.serviceModel>
  <behaviors>
    <serviceBehaviors>
      <behavior name="WcfTestAspNetAjaxBehavior">
      </behavior>
    </serviceBehaviors>
  <endpointBehaviors>
    <behavior name="WcfTestAspNetAjaxBehavior">
    <enableWebScript />
    </behavior>
  </endpointBehaviors>
  </behaviors>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
  multipleSiteBindingsEnabled="true" />
  <services>
  <service name="WcfTest">
    <endpoint address="" behaviorConfiguration="WcfTestAspNetAjaxBehavior"
    binding="webHttpBinding" contract="WcfTest" />
  </service>
  </services>
</system.serviceModel>

我还尝试使用以下组合标记 DoFail 方法:

[FaultContract(typeof(FaultException))]  
[FaultContract(typeof(FaultReason))]

我是不是误会了什么?您是否应该能够通过抛出 FaultException 而无需将 IncludeExceptionDetailInFaults 设置为 true 来获取异常信息?

【问题讨论】:

  • 您是否检查过以确保您的故障是可序列化的?启用调试时的异常信息是什么?服务器上是否弹出任何错误?

标签: javascript ajax wcf exception-handling


【解决方案1】:

有用的资源:

主要步骤:

  1. 通过实现 IErrorHandler 接口创建您自己的错误处理程序
  2. 创建 WebHttpBehavior 的子类并将默认错误处理程序替换为您自己的错误处理程序
  3. 通过使用自定义 ServiceHostFactory 或在 web.config 中定义为 behaviorExtension 插入您的自定义/扩展行为

【讨论】:

  • 第二个链接坏了。
猜你喜欢
  • 2011-11-08
  • 2010-09-27
  • 2010-09-08
  • 1970-01-01
  • 2011-01-09
  • 2013-10-14
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
相关资源
最近更新 更多