Pergunta

Eu tenho um serviço Web WCF que é referenciado em uma biblioteca de classes.Após a execução do projeto, ao criar o objeto cliente de serviço de dentro de uma biblioteca de classes, recebo uma InvalidOperationException com a mensagem:

Não foi possível encontrar o elemento de endpoint padrão que referências contrate 'myServiceReference.imyserveice' na seção de configuração do cliente ServiceModel.Isso pode ocorrer porque nenhum arquivo de configuração foi encontrado para o seu aplicativo ou porque nenhum elemento de endpoint correspondente a este contrato pode ser encontrado no elemento do cliente.

O código que estou usando para criar a instância é:

myServiceClient = new MyServiceClient();

de onde MyServiceClient herda

System.ServiceModel.ClientBase

Como faço para resolver isso?

Observação:Eu tenho um aplicativo de console separado que simplesmente cria o mesmo objeto de serviço e faz chamadas para ele e funciona sem problemas.

Foi útil?

Solução

Aqui está meu arquivo app.config da biblioteca de classes:

Você deve colocar essas configurações no arquivo de configuração do aplicativo principal.O aplicativo .NET (que está chamando sua biblioteca de classes) usa dados de seu próprio arquivo de configuração e não do arquivo de configuração de sua biblioteca.

Outras dicas

Ou você pode definir o endpoint em seu código:

http://msdn.microsoft.com/en-us/library/ms731862.aspx

BasicHttpBinding binding = new BasicHttpBinding();
EndpointAddress address = new EndpointAddress("http://url-to-service/");

// Create a client that is configured with this address and binding.
MyServiceClient client = new MyServiceClient(binding, address);

Eu tive um caso semelhante.Eu tinha uma biblioteca de classes que chamava um serviço da web, depois um .EXE que chamava o .DLL da biblioteca de classes.Acho que é o arquivo de configuração do .EXE que é usado e não o da configuração do .DLL.

Mas, como Richard disse acima, tive que qualificar totalmente o namespace.É um pouco doloroso.Abaixo está exatamente o que eu mudei.A dor é que eu tive que alterá -lo em dois lugares, um na referência.cs que é gerado quando você cria uma referência de serviço e a outra no arquivo de configuração.Assim, toda vez que eu mudo o web service e faço uma "Referência de Atualização" tenho que fazer a alteração no código C# novamente.

1) Na verdade, você deve alterar o ConfigurationName no reference.cs da seguinte maneira:

De: [System.ServiceModel.ServiceContractAttribute(Namespace = "http://TFBIC.RCT.BizTalk.Orchestrations", ConfigurationName = " RCTWebService.WcfService_TFBIC_RCT_BizTalk_Orchestrations")]

Para: [System.ServiceModel.ServiceContractAttribute(Namespace = "http://TFBIC.RCT.BizTalk.Orchestrations", ConfigurationName = "TFBIC.RCT.HIP.Components.RCTWebService.WcfService_TFBIC_RCT_BizTalk_Orchestrations")]

2) e também altere o valor “contrato” em todos os app.config relacionados (para .dll e .exe) da seguinte forma:

De:

<endereço do terminal=http://nxwtest08bt1.dev.txfb-ins.com/TFBIC.RCT.BizTalk.Orchestrations/WcfService_TFBIC_RCT_BizTalk_Orchestrations.svcbinding = "wshttpbinding" bindingConfiguration = "wshttpbinding_itwowayasync" contrat = "rctwebservice.wcfservice_tfbic_rct_biztalk_orchestrations" = "wshttpinding_itwayasynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynY

Para:

<endereço do terminal=http://nxwtest08bt1.dev.txfb-ins.com/TFBIC.RCT.BizTalk.Orchestrations/WcfService_TFBIC_RCT_BizTalk_Orchestrations.svcbinding = "wshtpbinding" bindingConfiguration = "wshttpbinding_itwowayasync" contrat = "tfbic.rct.hip.comPONENTS.RCTWEBSVICE.WCFSERVICE_TFBIC_RCT_BIZTALK_ORCHESTATIONSTAÇÕES ="

Só para ficar claro: como eu sabia qual era o namespace completo?O namespace do programa era TFBIC.RCT.HIP.Dentro disso, o código C# possui uma instrução adicional de namespace:

namespace RCTHipComponents

Provavelmente ajudaria se você postasse seu arquivo app.config, já que esse tipo de erro tende a apontar para um problema no <endpoint> bloquear.Certifique-se de que o atributo do contrato pareça adequado para você.

Editar:Tente qualificar totalmente o valor do seu contrato;use o namespace completo.Eu acho que isso é necessário.

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