2010-04-28 15 views
7

Estoy jugando con WCF Data Services (ADO.NET Data Services). Tengo un modelo de marco de entidad apuntado a la base de datos AdventureWorks.¿Cómo puedo alojar correctamente un servicio de datos WCF que se conecta a SQLServer en IIS? ¿Por qué recibo errores?

Cuando depuro mi archivo svc desde Visual Studio, funciona muy bien. Puedo decir /awservice.svc/Customers y recuperar el feed ATOM que espero.

Si publico el servicio (alojado en una aplicación web ASP.NET) en IIS7, la misma cadena de consulta devuelve un error 500. La página raíz svc funciona como se esperaba y devuelve ATOM con éxito. La ruta/Customers falla.

Esto es lo que mis donaciones se ven como en el archivo 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; 
    } 
} 

Actualización: Habilité errores detallados y sale el siguiente en el mensaje 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, ... 

Respuesta

8

se ve a me gusta esto es un error de autenticación SQL, IIS ejecuta su appPool bajo un usuario que no tiene acceso a su servidor SQL, cuando arruina en Visual Studio (localmente) será un usuario diferente. Compruebe el usuario que está utilizando IIS en el servidor y asegúrese de que tenga los derechos para hacer lo que desee en SQL.

+0

Estoy ejecutando tanto IIS como SQLServer en mi máquina. Yo * creo * Estoy usando Autenticación de Windows en ambos. Sé SQLServer seguro. ¿De alguna forma puedo verificar IIS? –

+2

@Pharabus - Eres un genio. Tuve que modificar la cuenta de identidad utilizada por DefaultAppPool. Aquí hay un artículo sobre cómo hacer esto: http://technet.microsoft.com/en-us/library/cc771170%28WS.10%29.aspx. De manera predeterminada, usaba una cuenta con privilegios bajos. Configurarlo en LocalSystem hizo el truco. –

1

tratar de cambiar el atributo de cadena de conexión seguridad integrada a Falso

0

solución rápida con IIS expreso

  1. Crear una excepción de firewall para permitir que las peticiones HTTP a través del servidor de seguridad en el puerto que IIS Express está utilizando.

  2. Obtenga la dirección IP de la computadora de desarrollo, si es necesario, ejecutando ipconfig.

  3. Busque el archivo de configuración de IIS Express, applicationhost.config, en la carpeta% USERPROFILE% \ Documents \ IISExpress \ config. La variable de entorno USERPROFILE normalmente tiene un valor de C: \ Users \.

  4. Abra applicationhost.config con el Bloc de notas u otro editor de texto y realice los siguientes cambios.

  5. Encuentra el elemento de sitio para el servicio web, WebServiceForTesting. Si no ve el elemento del sitio para el servicio web, debe implementar el servicio al menos una vez para crear el elemento.

  6. En la sección de enlaces del elemento del sitio, copie el elemento de enlace y pegue una copia directamente debajo del elemento de enlace existente para crear un segundo enlace. En el nuevo elemento de enlace, reemplace localhost con la dirección IP de la computadora. Guarde los cambios.

  7. Ejecute Visual Studio como administrador y abra la solución de Visual Studio.

  8. En el proyecto de aplicación de teléfono, elimine la referencia de servicio al servicio si lo ha agregado previamente. Agregue una nueva referencia de servicio al servicio web reconfigurado. En el cuadro de diálogo Agregar referencia de servicio, en el cuadro Dirección, reemplace localhost con la dirección IP de su computadora de desarrollo. Haga clic en Ir.

  9. Se descubre y se muestra el segundo enlace para el servicio en el proyecto WCF. Haga clic en Aceptar.

  10. Se agrega una nueva referencia de servicio que usa la dirección IP de la computadora de desarrollo al proyecto de Windows Phone.

+0

Hola, bienvenido a StackOverflow! Su respuesta parece correcta, pero será mucho más legible si la divide en varios párrafos, o incluso utiliza una lista numerada/boletín. – Benesh

Cuestiones relacionadas