Как правильно разместить службу данных WCF, которая подключается к SQLServer в IIS? Почему я получаю ошибки?
Я играю с WCF Data Services (ADO.NET Data Services). У меня есть модель entity framework, указанная на базу данных AdventureWorks.
когда я отлаживаю свой svc-файл из Visual Studio, он отлично работает. Я могу сказать / awservice.svc / клиенты и получить обратно поток ATOM я ожидаю.
Если я опубликую службу (размещенную в ASP.NET веб-приложение) в IIS7 та же строка запроса возвращает ошибку 500. Сама корневая страница svc работает как ожидается и успешно возвращает ATOM. Ошибка пути /Customers.
вот как выглядят мои гранты в файле 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 APPPOOLDefaultAppPool'.
</message>
<type>System.Data.SqlClient.SqlException</type>
<stacktrace>
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, ...
3 ответов
Мне кажется, что это ошибка проверки подлинности SQL, IIS запускает свой appPool под пользователем, у которого нет доступа к вашему SQL server, когда вы разрушаете в Visual Studio (локально), это будет другой пользователь. Проверьте пользователя, который использует IIS на сервере и убедитесь, что он имеет права делать то, что вы хотите в SQL.
быстрое решение с IIS Express
создайте исключение брандмауэра, чтобы разрешить HTTP-запросы через брандмауэр на порту, который использует IIS Express.
при необходимости получите IP-адрес компьютера разработки, запустив ipconfig.
найдите файл конфигурации IIS Express, applicationhost.config, в папке %USERPROFILE%\Documents\IISExpress\config. Папка переменная среды обычно имеет значение C:\Users\.
открыть файл applicationhost.настройте блокнот или другой текстовый редактор и внесите следующие изменения.
найдите элемент сайта для веб-службы WebServiceForTesting. Если элемент сайта для веб-службы не отображается, для его создания необходимо развернуть службу хотя бы один раз.
в разделе привязки элемента сайта скопируйте элемент привязки и вставьте копию непосредственно под существующим элементом привязки, чтобы создать вторую привязку. В новом элементе привязки замените localhost IP-адресом компьютера. Сохранять изменения.
запустите Visual Studio от имени администратора и откройте решение Visual Studio.
в проекте приложения phone удалите ссылку на службу, если вы ранее добавили ее. Добавление новой ссылки на службу в реконфигурированный web услуга. В диалоговом окне Добавление ссылки на службу в поле Адрес замените localhost на IP-адрес компьютера разработчика. Нажмите Кнопку Go.
обнаружена и показана вторая привязка для службы в проекте WCF. нажимать OK.
в проект Windows Phone добавляется новая ссылка на службу, использующая IP-адрес компьютера разработчика.