将ADO.Net数据服务应用程序部署到IIS时出现问题

时间:2020-03-05 18:50:49  来源:igfitidea点击:

我正在向现有网页添加ADO.Net数据服务查找功能。从Visual Studio运行时,一切正常,但是当我将其部署到IIS时,出现以下错误:

Request Error
The server encountered an error processing the request. See server logs for more details.

即使尝试显示默认页面,我也能得到这个信息,即:

http://server/FFLookup.svc

我在服务器上安装了3.5 SP1.

我缺少什么,它指的是"服务器日志"?我找不到其他错误消息。

在事件查看器日志(系统或者应用程序)中什么都没有,在IIS日志中除了GET之外什么都没有:

2008-09-10 15:20:19 10.7.131.71 GET /FFLookup.svc - 8082 - 10.7.131.86 Mozilla/5.0+(Windows;+U;+Windows+NT+5.1;+en-US)+AppleWebKit/525.13+(KHTML,+like+Gecko)+Chrome/0.2.149.29+Safari/525.13 401 2 2148074254

没有返回堆栈跟踪。我得到的唯一响应是如上所述的"请求错误"。

谢谢

帕特里克

解决方案

回答

好吧,我发现了上面的错误中提到的"服务器日志"。

我们需要通过添加以下标记来打开web.config文件中的跟踪:

<system.diagnostics>
      <sources>
        <source name="System.ServiceModel.MessageLogging" switchValue="Warning, ActivityTracing" >
            <listeners>
                <add name="ServiceModelTraceListener"/>
            </listeners>
        </source>

        <source name="System.ServiceModel" switchValue="Verbose,ActivityTracing"        >
            <listeners>
                <add name="ServiceModelTraceListener"/>
            </listeners>
        </source>
        <source name="System.Runtime.Serialization" switchValue="Verbose,ActivityTracing">
            <listeners>
                <add name="ServiceModelTraceListener"/>
            </listeners>
        </source>
    </sources>
    <sharedListeners>
        <add initializeData="App_tracelog.svclog"   
                        type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
                        name="ServiceModelTraceListener" traceOutputOptions="Timestamp"/>
    </sharedListeners>
</system.diagnostics>

这将在网站目录中创建一个名为app_tracelog.svclog的文件。

然后,我们可以使用SvcTraceViewer.exe实用工具来查看此文件。查看器在突出显示错误方面做得很好(以及有关通讯的许多其他信息)。

注意:使用上述参数创建的日志文件增长很快。仅在调试期间将其打开!

在这种情况下,问题最终是我们的Oracle数据提供程序OraDirect.Net的版本不正确。我们使用的版本不支持3.5 SP1.

回答

为了详细显示由数据服务引起的错误,我们可以在数据服务定义上方放置以下标记:

[System.ServiceModel.ServiceBehavior(IncludeExceptionDetailInFaults = true)]

然后,这将在浏览器窗口中显示错误以及堆栈跟踪。

除了此dataservices之外,还将引发HandleException方法的所有异常,因此,如果在dataservice类上实现此方法,则可以在其上设置一个断点并查看该异常:

protected override void HandleException(HandleExceptionArgs e)
{
  try
  {
    e.UseVerboseErrors = true;
  }
  catch (Exception ex)
  {
    Console.WriteLine(ex.Message);
  }
}

回答

对我来说,错误是由两个具有相同名称的方法引起的(意外的重载)。

Overloading is not supported but type 'abc' has an overloaded method 'Void SubmitCart(System.String, Int32)'.

我是通过在调试模式下运行服务发现的。