Как правильно разместить службу данных WCF, которая подключается к SQLServer в IIS? Почему я получаю ошибки? - PullRequest
7 голосов
/ 28 апреля 2010

Я играю с WCF Data Services (ADO.NET Data Services). У меня есть модель каркаса сущностей, указанная в базе данных AdventureWorks.

Когда я отлаживаю свой SVC-файл из Visual Studio, он отлично работает. Я могу сказать /awservice.svc/Customers и получить ожидаемый поток 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 APPPOOL\DefaultAppPool'.
</message>
<type>System.Data.SqlClient.SqlException</type>
<stacktrace>
   at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, ...

Ответы [ 3 ]

8 голосов
/ 28 апреля 2010

Мне кажется, что это ошибка аутентификации SQL, IIS запускает appPool под пользователем, у которого нет доступа к вашему серверу SQL, когда вы рушитесь в Visual Studio (локально), это будет другой пользователь. Проверьте пользователя, который использует IIS на сервере, и убедитесь, что у него есть права на то, что вы хотите в SQL.

1 голос
/ 30 января 2011

Попробуйте изменить атрибут строки подключения Встроенная защита на Ложь

0 голосов
/ 07 апреля 2014

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

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

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

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

  4. Откройте applicationhost.config с помощью Блокнота или другого текстового редактора и внесите следующие изменения.

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

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

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

  8. В проекте приложения телефона удалите сервисную ссылку на сервис, если вы ранее добавили ее. Добавьте новую ссылку на службу в переконфигурированную веб-службу. В диалоговом окне Add Service Reference в поле Address замените localhost IP-адресом вашего компьютера разработчика. Нажмите Go.

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

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

...