Проблема развертывания приложения ADO.Net Data Service в IIS
Я добавляю функцию поиска ADO.Net Data Service на существующую веб-страницу. Все отлично работает при работе с визуальной студией, но когда я перекачиваю ее в IIS, я получаю следующую ошибку:
Ошибка запроса
На сервере возникла ошибка при обработке запроса. Подробнее см. Журналы сервера.
Я получаю это даже при попытке отобразить страницу по умолчанию, то есть:
http://server/FFLookup.svc
У меня на сервере установлено 3.5 SP1.
Что мне не хватает, и на какие "серверные журналы" он ссылается? Я не могу найти никаких дополнительных сообщений об ошибках.
В журналах просмотра событий (System или Application) ничего нет, и ничего в журналах 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
Нет возврата трассировки стека. Единственный ответ, который я получаю, - это "Ошибка запроса", как указано выше.
Спасибо
Патрик
Ответы
Ответ 1
Для подробного отображения ошибок, возникающих в результате вашей службы данных, вы можете поместить следующий тег выше своего определения данных:
[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);
}
}
Ответ 2
Ну, я нашел "Журналы сервера", упомянутые в приведенной выше ошибке.
Вам нужно включить трассировку в файле 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 для просмотра этого файла. Зритель делает хорошую работу по выявлению ошибок (наряду с большим количеством другой информации о связях).
Остерегайтесь: файл журнала, созданный с указанными выше параметрами, растет очень быстро. Включите его только во время отладки!
В этом конкретном случае проблема оказалась неправильной версией OraDirect.Net, нашего поставщика данных Oracle. Версия, которую мы использовали, не поддерживала 3.5 SP1.
Ответ 3
Для меня ошибка была вызвана двумя методами с тем же именем (непреднамеренная перегрузка).
Перегрузка не поддерживается, но тип 'abc' имеет перегруженный метод 'Void SubmitCart (System.String, Int32)'.
Я узнал, запустив службу в режиме отладки.