Как правильно разместить службу данных 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.


попробуйте изменить атрибут строки подключения Комплексная безопасность to False


быстрое решение с IIS Express

  1. создайте исключение брандмауэра, чтобы разрешить HTTP-запросы через брандмауэр на порту, который использует IIS Express.

  2. при необходимости получите IP-адрес компьютера разработки, запустив ipconfig.

  3. найдите файл конфигурации IIS Express, applicationhost.config, в папке %USERPROFILE%\Documents\IISExpress\config. Папка переменная среды обычно имеет значение C:\Users\.

  4. открыть файл applicationhost.настройте блокнот или другой текстовый редактор и внесите следующие изменения.

  5. найдите элемент сайта для веб-службы WebServiceForTesting. Если элемент сайта для веб-службы не отображается, для его создания необходимо развернуть службу хотя бы один раз.

  6. в разделе привязки элемента сайта скопируйте элемент привязки и вставьте копию непосредственно под существующим элементом привязки, чтобы создать вторую привязку. В новом элементе привязки замените localhost IP-адресом компьютера. Сохранять изменения.

  7. запустите Visual Studio от имени администратора и откройте решение Visual Studio.

  8. в проекте приложения phone удалите ссылку на службу, если вы ранее добавили ее. Добавление новой ссылки на службу в реконфигурированный web услуга. В диалоговом окне Добавление ссылки на службу в поле Адрес замените localhost на IP-адрес компьютера разработчика. Нажмите Кнопку Go.

  9. обнаружена и показана вторая привязка для службы в проекте WCF. нажимать OK.

  10. в проект Windows Phone добавляется новая ссылка на службу, использующая IP-адрес компьютера разработчика.