Я играю вокруг с Услугами передачи данных WCF (Услуги передачи данных ADO.NET). У меня есть модель платформы объекта, указал на базу данных AdventureWorks.
Когда я отлаживаю свой svc файл из Visual Studio, он работает отлично. Я могу сказать что/awservice.svc/Customers и возвратить Atom-ленту, которую я ожидаю.
Если я публикую сервис (размещенный в веб-приложении ASP.NET) к IIS7, та же строка запроса возвращает 500 ошибок. Корень svc сама страница работает как ожидалось и успешно возвращает ATOM. Клиенты / соединяют сбои каналом.
Вот то, на что мои предоставления похожи в svc файле:
public class AWService : DataService<AWEntities>
{
public static void InitializeService( DataServiceConfiguration config )
{
config.SetEntitySetAccessRule( "*", EntitySetRights.All );
config.SetServiceOperationAccessRule( "*", ServiceOperationRights.All );
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
}
}
Обновление: Я включил подробные ошибки, и получите следующее в сообщении XML:
<innererror>
<message>The underlying provider failed on Open.</message>
<type>System.Data.EntityException</type>
<stacktrace>
at System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(
...
...
<internalexception>
<message>
Login failed for user 'IIS APPPOOL\DefaultAppPool'.
</message>
<type>System.Data.SqlClient.SqlException</type>
<stacktrace>
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, ...
Мне кажется, что это ошибка аутентификации SQL, IIS запускает свой пул приложений под пользователем, у которого нет доступа к вашему серверу SQL, когда вы руин в Visual Studio (локально) будет другим пользователем. Проверьте пользователя, которого использует IIS на сервере, и убедитесь, что у него есть права делать то, что вы хотите в SQL.