在 ASP.NET 页面的 OnUnload 事件中调用 WCF 方法

3
我希望在应用程序退出时调用一个WCF方法,但是当我尝试运行带有以下代码的ASP.NET应用程序时:
protected override void OnUnload(EventArgs e)
{
    base.OnUnload(e);

    MaChatServer.Service1Client proxy = new MaChatServer.Service1Client();
    proxy.RemoveUser(UsernameStatic);
    if (proxy.GetAllUsers().Count == 0)
    {
        proxy.ResetServer();
    }
}

我看到了这个错误页面:
描述:当前Web请求的执行过程中发生了未处理的异常。有关错误信息及其在代码中的来源的更多信息,请参考堆栈跟踪。异常详细信息:System.ServiceModel.FaultException:由于内部错误,服务器无法处理该请求。有关错误的更多信息,请在服务器上打开IncludeExceptionDetailInFaults(从ServiceBehaviorAttribute或configuration behavior)以将异常信息发送回客户端,或者按照Microsoft .NET Framework SDK文档中的说明打开跟踪并检查服务器跟踪日志。

你按照错误信息所述的做了吗?你启用了跟踪以查看实际错误吗? - Ahmed ilyas
请参见"问题标题中是否应包含“标签”?",共识是“不应该”! - user57508
是的,只有当我添加以下内容时它才无法工作:protected override void OnUnload(EventArgs e) { base.OnUnload(e);MaChatServer.Service1Client proxy = new MaChatServer.Service1Client(); proxy.RemoveUser(UsernameStatic); if (proxy.GetAllUsers().Count == 0) { proxy.ResetServer(); }} - Matteo Guglielmetti
我在想,如果你把"base.OnUnload(e)"放在方法的最后一行会发生什么?你试过吗? - Ricardo Pontual
很遗憾,什么都没有改变。 - Matteo Guglielmetti
显示剩余2条评论
1个回答

0

首先,我建议您将配置添加到您的WCF服务主机(.config)中。

<system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="debug">
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

因为你没有准确的错误信息,所以必须将消息发送给客户端


我已经完成了这个,但现在页面不起作用了。但是如果我删除 protected override void OnUnload(EventArgs e) { base.OnUnload(e); MaChatServer.Service1Client proxy = new MaChatServer.Service1Client(); proxy.RemoveUser(UsernameStatic); if (proxy.GetAllUsers().Count == 0) { proxy.ResetServer(); } },它可以工作。 - Matteo Guglielmetti

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接