由于内部错误,服务器无法处理请求

Posted

技术标签:

【中文标题】由于内部错误,服务器无法处理请求【英文标题】:The server was unable to process the request due to an internal error 【发布时间】:2014-01-31 23:05:56 【问题描述】:

当我尝试从 web 服务加载方法时,我得到一个错误:

“。有关错误的详细信息,请在服务器上打开 IncludeExceptionDetailInFaults(来自 ServiceBehaviorAttribute 或来自配置行为),以便将异常信息发送回到客户端,或根据 Microsoft .NET Framework SDK 文档打开跟踪并检查服务器跟踪日志”

这是我的 app.config 端点定义:

<services>
  <service name="Service" behaviorConfiguration="debug">
</services>

<client>
  <endpoint name="Service" address="net.tcp://localhost:12708/" binding="netTcpBinding" bindingConfiguration="netTcp" contract="path.IService" >
    <identity>
      <servicePrincipalName />
    </identity>
  </endpoint>
</client>

<serviceBehaviors>
    <behavior name="debug">
      <serviceDebug includeExceptionDetailInFaults="True" />
    </behavior>
  </serviceBehaviors>

如果我声明了 serviceBehaviors,我将看不到更多信息事件。 有人可以告诉我如何查看有关此错误的更多详细信息吗?

【问题讨论】:

启用 WCF 跟踪以查看发生了什么。见***.com/a/4271597/870604 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。 【参考方案1】:

错误信息非常清楚。出于安全原因,服务器被配置为隐藏内部错误。这是根据fault handling in WCF MSDN post 的默认行为。

我看到两个选项,都假设您可以访问服务器:

启用显示错误详细信息 请参阅fault handling in WCF MSDN post。它在“发生异常时提供附加信息”部分中提供了有关如何设置配置的详细信息。

使用实际断点进行调试 这会更好。在我看来,没有任何错误消息可以真正为您提供调试会话所做的见解。

希望我能帮上忙!

【讨论】:

感谢您的快速回复!不幸的是,这个解决方案仍然不适合我。我认为原因是我没有通过 F5 运行服务实例,而是在我的控制台应用程序项目上运行 RB 并执行:调试-> 启动新实例。所以我没有完全加载服务定义,而是尝试从客户端部分的端点加载服务。调试对我不起作用,当我尝试在我的代码中放置断点时,调试器没有输入。有什么想法吗? 我没有必要的见解我的朋友...如果我有什么想法,我会告诉你。【参考方案2】:

解决方案:我的服务没有启动。 因为我们在本地运行服务,所以我需要打开所需的解决方案并通过 RG 在本地运行服务 -> 创建新实例。

我怎么知道这件事?我的日志文件存储在 c:/temp 中。 在这个位置,出现了一个新的日志文件,在那里我找到了有关我的错误的更多信息。 (我一直在想关于我的错误消息的详细信息会进入我的基本日志文件,但我没想到另一个日志文件。

所以,原因:网络服务不起作用。解决方案:在本地启动服务:Rb -> 创建新服务。

【讨论】:

【参考方案3】:

在本地运行时,您可以通过使用Tools -> Attach to Process 附加到服务来调试服务。

在可用进程列表中,查找进程W3wp.exe,类型为Managed (...) x64Managed (...) x86,具体取决于您将服务配置为运行什么。

单击Attatch,在您的服务中设置几个断点,然后尝试在您的网络浏览器中再次访问它,它们应该会被命中。

请注意,您需要在调试模式下发布您的 WS 才能正常工作。

【讨论】:

感谢您的回复!是的,我尝试附加进程,但我没有 w3wp 或 Managed .. 等进程;/ 如果我解释我如何测试我的应用程序可能会有所帮助:我在本地运行基于 localhost 的服务应用程序: 12708。接下来,我使用控制台应用程序回到我的解决方案,RB 在我的应用程序上,然后单击:调试-> 启动新实例。我不知道我应该攻击哪个进程;/ @codelikeprogrammerwoman 好的;我假设您已发布到 IIS 服务器。如果你只是从 VS 运行它,你可能会发现一个名为 WebDev.WebServer40.EXE 的进程。它应该有一个像ASP.NET Development Server - Port 12708 这样的标题(在附加到进程列表中查找进程之前,请确保你已经通过尝试运行服务来启动进程)。 我的服务已启动,因为我在 WCF 服务主机中看到“状态 = 已启动”。在进程列表中,我没有 webdev、w3wp、portnumber 等进程;/ 只有一项服务看起来合适:在标题中有 [path_to_my_solution.project_name.exe],在类型中有 Managed(...) 但它还是不行;/ 有一个进程我无法附加,因为我收到错误“无法附加到进程。调试器已附加”但它没有;/奇怪...跨度> 【参考方案4】:

您应该在配置文件中添加诊断:

 <system.diagnostics> 
      <sources> 
        <source name="System.ServiceModel" 
                switchValue="All" 
                propagateActivity="true"> 
          <listeners> 
            <add name="traceListener" 
                type="System.Diagnostics.XmlWriterTraceListener" 
                initializeData= "D:\AppLogs\Traces.svclog" /> 
          </listeners> 
        </source> 
      </sources> 
    </system.diagnostics>

【讨论】:

以上是关于由于内部错误,服务器无法处理请求的主要内容,如果未能解决你的问题,请参考以下文章

400错误 是前端的问题 还是服务器

PayPal - 10001 内部错误:超时处理请求快速结帐

尝试使用 ErrorDocument 处理请求时出现 500 内部服务器错误

500 - 内部服务器错误.您查找的资源存在问题,因而无法显示.

处理请求时出错错误代码:500 错误文本:在 phpmyadmin 中选择任何数据库时发生内部服务器错误

PDO 请求导致 500 内部服务器错误