Como adicionar uma referência de serviço a um cliente WCF para um serviço da Web que requer certificado de autenticação do cliente

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

Pergunta

CUIDADO, ALERTA DE WCF NOOBIE

Preciso criar um cliente WCF para consultar um serviço da Web não-WCF. O serviço da web não é um serviço WCF. Além disso, o serviço da Web requer um certificado de autenticação do cliente. Agora, eu tenho o certificado e posso criar um cliente não-WCF que funcione perfeitamente; Consegui 'adicionar referência da Web' e uma caixa de diálogo Certificado aberta para me permitir selecionar o certificado apropriado e depois criou a referência da Web. Tentar criar um cliente WCF via 'Add Service Reference' é outra história, apenas falha com um erro negado de acesso 403.

Eu tenho o WSDL para o serviço e executei svcutil.exe nele, mas não tenho certeza de como proceder a partir daí.

Obrigado por qualquer ajuda!

Foi útil?

Solução

Estou assumindo que o serviço que você está usando está executando a autenticação SSL do cliente.

Como a referência de serviço de adição está falhando, você pode usar svcutil para gerar o cliente a partir do arquivo WSDL que você tem. Eu acho que a sintaxe seria algo como:

svcutil *.wsdl /l:C# /out:Reference.cs /config /s /ct:System.Collections.Generic.List`1 /ser:Auto /tcv:Version35 /n:*,<NameOfYourNamespaceHere> /edb

Isso gerará um arquivo, reference.cs, que contém as classes de proxy para o serviço (você pode fornecer a este arquivo o nome desejar). Adicione este arquivo ao seu projeto. Um arquivo de configuração, output.config, também será gerado. Você pode adicionar essa configuração à configuração do seu aplicativo em vez de digitar tudo à mão.

Agora você pode seguir este artigo do MSDN sobre o uso Segurança de transporte com autenticação de certificado. Você pode pular para a seção do cliente, onde ele mostra como anexar o certificado à solicitação no código e na configuração.

Boa sorte.

Outras dicas

Sei que essa é a pergunta antiga e já foi resolvida, mas gostaria de mencionar que a referência de serviço Adicionar também funciona para arquivos WSDL armazenados no disco. Marc também mencionou isso. Adicionar diálogo de referência de serviço aceita:

  • URL para WSDL
  • URL to Metadata Exchange terminal
  • URL de serviço onde /mex é adicionado internamente
  • Qualquer caminho de arquivo para o arquivo WSDL

Portanto, se você possui WSDL e todos precisam de arquivos XSD, também pode usar a referência de serviço. A única parte complicada é que a caixa de diálogo Adicionar serviço de referência de serviço não possui botão de navegação e é por isso que essa funcionalidade não é bem conhecida.

Pergunta estúpida (talvez): você poderia se conectar ao terminal de serviço, apresentá -lo com suas credenciais armazenadas no certificado e depois baixar o WSDL (e possivelmente XSD) a partir daí? Ou poderia ser a entidade que oferecer esse serviço seria capaz de enviar esses arquivos (ou disponibilizá -los para download)?

Depois de ter o arquivo WSDL (e XSD) no disco, deve ser fácil o suficiente para criar um cliente WCF para isso (usando qualquer um svcutil.exe ou Add Service Reference) com base nesses arquivos e configure a segurança apropriada para ele.

Apenas um pensamento ... (vale US $ 0,02?)

Marc

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