aplicativo WCF Implantando no IIS, mas o SQL Server Database Connection não está funcionando [fechado]

1

Sou novo no WCF, estou tentando implantar meu aplicativo de amostra do WCF no IIS. Esse aplicativo funciona bem no modo de depuração com o VS2008. Esse aplicativo autentica as mensagens do wcf com o código a seguir. Eu estou fazendo assim, eu adicionei o resultado .dlls web.config e Service.svc no diretório wwwroot, e eu também adicionei a string Connection no IIS Manager, que é

Servidor = MyPC \ SQLEXPRESS; Banco de Dados = MySampleDb; Segurança Integrada = true

Estou usando a segurança integrada do Windows. Estou usando a mesma string de conexão para conexão na classe Database, mas recebo a seguinte exceção,

Por favor me guie para implantar este aplicativo Na validação pública de validação, void Validate (string userName, string password) {     ValidateUser (userName, senha); }

bool estático público ValidateUser (string userName, senha da string) {         if (! string.IsNullOrEmpty (userName))     {         Cliente do ICustomer = GetCustomerByUsername (userName);         if (customer == null)         {                         lançar nova exceção ("Usuário não encontrado.");         }         outro         {             retorno verdadeiro;         }

} 
else 
{ 
    throw new FaultException("User name is required!"); 
}

}

public static ICustomer GetCustomerByUsername (nome de usuário da string) {     experimentar     {         // ConnectionString="Servidor = MyPC \ SQLEXPRESS; Banco de Dados = MySampleDb; Segurança Integrada = true";

OpenConnection ();             var cmd = novo SqlCommand ("GetUserByUsername", _connection) {CommandType = CommandType.StoredProcedure};

        cmd.Parameters.Add("Username", username);

        connState = _connection.State.ToString();

        if (_connection.State == ConnectionState.Closed)

            OpenConnection();

        SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);

        ICustomer customer = null;

        customer = ExtractCustomerFromDataReader(dr)[0];
        dr.Close();
        return customer;
    }
    catch (Exception e)
    {
        throw new Exception(e.Message + Environment.NewLine + e.StackTrace);
    }
    finally
    {
        CloseConnection();
    }

Exceção:

O ExecuteReader requer uma conexão aberta e disponível. O estado atual da conexão é fechado. em System.Data.SqlClient.SqlConnection.GetOpenConnection (método String) em System.Data.SqlClient.SqlConnection.ValidateConnectionForExecute (método String, comando SqlCommand) em System.Data.SqlClient.SqlCommand.ValidateCommand (método String, async booleano) no sistema .Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, RunBehavior runBehavior, método booleano returnStream, String, resultado DbAsyncResult) em System.Data.SqlClient.SqlCommand.RunExecuteReader (CmdBehaviorComportBehavior, RunBehavior runBehavior, método booleano returnStream, String) em System. Data.SqlClient.SqlCommand.ExecuteReader (comportamento CommandBehavior, método String) em System.Data.SqlClient.SqlCommand.ExecuteReader (comportamento CommandBehavior) em Aschrafi.MobileZollServer.Services.DatabaseHelper.GetCustomerByUsername (String username) em

Acho que estou perdendo algum ponto nas configurações do banco de dados ou no Gerenciador do IIS as configurações do site. Algum tutorial ou link atricular para a implementação do wcf no iis e autenticação da comunicação do wcf seria muito apreciado. obrigado antecipadamente.

    
por yasar 20.09.2010 / 20:27

2 respostas

1

Segurança integrada significa que a conexão ocorre sob as credenciais do encadeamento que executa a operação Abrir. Normalmente, o encadeamento possui as credenciais do processo, no caso do IIS e do WCF, o que significa que as credenciais configuradas do AppPool são executadas como. Se o thread estiver representando (como é frequentemente o caso com o WCF), o thread tem as credenciais do chamador e ocorre para autenticar com um servidor de banco de dados remoto. Quaisquer que sejam as credenciais usadas, elas precisam ser confiáveis e permitir a conexão pelo servidor de banco de dados.

Assim, a solução para seus problemas depende do que você está fazendo e você forneceu muito código, mas não as informações relevantes reais.

  • você se faz passar?
  • se o serviço WCF não representar o chamador, o pool de aplicativos configurado para executar o serviço WCF no IIS deverá receber a permissão necessária para se conectar ao banco de dados.
    • se o pool de aplicativos do WCF usar uma conta de domínio, conceda permissão no banco de dados à conta de domínio
    • se o pool de aplicativos do WCF usar uma conta local e o banco de dados estiver hospedado no mesmo host que o IIS, a conta local precisará receber permissão para se conectar
    • se o pool de aplicativos do WCF usar uma conta local e o banco de dados for remoto do host do IIS, você não poderá se conectar (as contas espelhadas não são ).
    • se o pool de aplicativos do WCF usar LocalSystem ou NETWORK SERVICE e o banco de dados for remoto do IIS, a conta da máquina do host IIS deverá receber permissão
    • se o pool de aplicativos do WCF usar LocalSystem ou NETWORK SERVICE e o DB for local, a conta do sistema local precisará receber permissão
    • se o pool de aplicativos do WCF usar LOCAL SERVICE e o banco de dados for removido do IIS, você não poderá se conectar
  • se o WCF representar e o DB for local, será necessário conceder a conexão ao responsável pela chamada
  • se o WCF representar e o banco de dados for rmeote, será necessário conceder a conexão ao responsável pela chamada e configurar a delegação restrita.

Todos estes são descritos detalhadamente na documentação do produto e você não deve ter nenhum problema seguindo o MSDN:  - Fundamentos de segurança do WCF  - Delegação e representação com o WCF  - Diretrizes de segurança do WCF

    
por 21.09.2010 / 02:22
0

Você não mostra onde realmente abriu a conexão. Parece que foi fechado.

    
por 20.09.2010 / 20:37