Como faço para modificar meu serviço WCF para trabalhar com as páginas do ASP.NET?

StackOverflow https://stackoverflow.com/questions/2542148

  •  23-09-2019
  •  | 
  •  

Pergunta

Criei um serviço WCF (.NET 3.5) que obtém dados de um banco de dados e retorna uma lista de objetos. Funciona muito bem. Eu o testei usando o aplicativo WCFTestClient e obtive os resultados desejados.

Agora, tentei criar um aplicativo Web ASP.NET e consumir o serviço. Depois de ativar <serviceDebug includeExceptionDetailInFaults="true"/> No arquivo de configuração, a mensagem de erro é "Referência de objeto não definida como uma instância de um objeto".

Como faço para modificar o serviço para trabalhar com asp.net?

Obrigado!

Atualização 1 - criei uma referência ao serviço. Quando executei meu aplicativo de teste básico, com base no código de amostra exibido na página da web padrão do serviço, recebi a mensagem "Não definida como uma instância de uma instância de um objeto".

O serviço está retornando os resultados corretos quando uso o utilitário cliente de teste do WCF fornecido com o Visual Studio. Quando tento usar o código a seguir, tudo no evento Page_load, recebo a mensagem de referência do objeto.

PhoneNumberServiceClient client = new PhoneNumberServiceClient();

// Use the 'client' variable to call operations on the service
List<PhoneNumber> phones = client.GetPhoneNumbers();  

// Always close the client.
client.Close();

Vou tentar obter algumas informações de depuração adicionais.

Foi útil?

Solução

Você já tentou abrir o serviço depois de inicializá -lo usando:

client.Open();

Se o problema ainda persistir, talvez o item esteja no próprio método WCF. Tente adicionar pontos de interrupção ao seu método e depra -o para rastrear a causa do erro. Você também pode usar perfiladores.

Outras dicas

Você também precisa configurar o serviço para permitir detalhes de exceção nos resultados. Siga as informações aqui para fazer isso acontecer.

Presumo que seu aplicativo ASP.NET espera capturar certas informações do serviço que você não o configurou para fornecer, daí o erro de objeto nulo.

Eu teria escrito isso como comentário, mas não consegui descobrir como, então acho que vou tentar uma resposta.

Você mencionou que usou o cliente de teste embutido, mas quando criou seu aplicativo cliente (o site com o qual deseja ligar para o seu novo serviço), você configurou seu ponto final (web.config) para corresponder ao final do seu serviço WCF ? Por exemplo, um aplicativo cliente que chama um serviço WCF com endpoint WSHTTPBINDING:

<configuration>
<system.serviceModel>
    <client>
        <endpoint address="http://localhost:8080/ContractorService" binding="wsHttpBinding" contract="ContractorService.IContractorService"
            name="ContractorService_WsHttp">
        </endpoint>
    </client>
</system.serviceModel>

Além disso, seu serviço está retornando uma lista, o Referência de serviço padrão que você adicionou ao seu cliente provavelmente para na matriz. Clique com o botão direito do mouse no serviço Reference seu cliente agora e selecione Configurar Referência de serviço, na caixa suspensa para o tipo de coleção, em vez de system.array, select system.collections.generic.list.

Se você precisar de detalhes sobre a configuração, verifique aqui http://msdn.microsoft.com/en-us/library/dd936243.aspx

Coloque um ponto de interrupção no método Page_load do seu cliente, você poderá passar pelo código do seu cliente e ele entrará automaticamente no seu serviço WCF depois de chamar o método, então você poderá ver exatamente onde ele falha. Espero que isto ajude

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top