【问题标题】: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,我将看不到更多信息事件。 有人可以告诉我如何查看有关此错误的更多详细信息吗?

【问题讨论】:

标签: c# .net wcf endpoint


【解决方案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>
    

    【讨论】:

      猜你喜欢
      • 2020-11-11
      • 1970-01-01
      • 2018-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多