Eu construí um aplicativo da Web que contém um contrato de serviço WCF e um controle Silverlight que faz chamadas para esse serviço WCF. Nos meus servidores de desenvolvimento e teste, ele funciona muito bem.
Quando implanto em nosso servidor System.ServiceModel.ServiceActivationException
ativo e executo o aplicativo, recebo uma exceção do tipo que afirma que o serviço não pode ser ativado devido a uma exceção durante a compilação. A exceção é:
Esta coleção já contém um endereço com o esquema http. Pode haver no máximo um endereço por esquema nesta coleção.
Eu li que essa exceção pode ser lançada se o site tiver mais de um cabeçalho de host, o que é verdade em nosso servidor ativo. Aparentemente, os serviços WCF hospedados no IIS podem ter apenas um endereço base. Como posso contornar esse problema?
Resumo,
Solução de código: Aqui
Soluções de configuração: Aqui
Com a ajuda de Mike Chaliy , encontrei algumas soluções sobre como fazer isso através do código. Como esse problema afetará praticamente todos os projetos que implementamos em um ambiente ativo, eu ofereci uma solução puramente de configuração. Acabei encontrando um que detalha como fazer isso no .net 3.0 e no .net 3.5.
Retirado do site, abaixo está um exemplo de como alterar a configuração da web de seus aplicativos:
Solução de DNS (não testada): acho que se você criou uma nova entrada de DNS específica para seu aplicativo da Web, adicionou um novo site e forneceu um único cabeçalho de host correspondente à entrada de DNS, você mitigaria esse problema completamente e não faria isso. precisa escrever um código personalizado ou adicionar prefixos ao seu arquivo web.config.
fonte
Você viu isso - http://kb.discountasp.net/KB/a799/error-accessing-wcf-service-this-collection-already.aspx
fonte
No meu caso, a causa raiz desse problema foi várias ligações http definidas no site pai, ou seja, InetMgr-> Sites-> Mysite-> properties-> EditBindings. Excluí uma ligação http que não era necessária e o problema foi resolvido.
fonte
E, no meu caso, era simples: usei o assistente 'Adicionar serviço WCF' no Visual Studio, que criou automaticamente as seções correspondentes no app.config. Então continuei lendo Como: Hospedar um serviço WCF em um aplicativo gerenciado . O problema era: eu não precisava especificar o URL para executar o serviço da web.
Substituir:
Com:
E o erro se foi.
Ideia genérica: se você fornecer o endereço base como um parâmetro e especificá-lo em config, receberá este erro. Muito provavelmente, essa não é a única maneira de obter o erro, tu.
fonte
Eu tive esse problema, e a causa foi bastante tola. Eu estava testando a demonstração da Microsoft sobre a execução de um ServiceHost com um executável de linha de comando. Eu segui as instruções, incluindo onde diz para adicionar o serviço (e a interface) apropriados. Mas eu recebi o erro acima.
Acontece que quando adicionei a classe de serviço, o VS adicionou automaticamente a configuração ao app.config. E a demo estava tentando adicionar essas informações também. Como ele já estava na configuração, removi a parte demo e funcionou.
fonte
Eu vim pelo mesmo erro em um antigo Exchange Server 2010. Um serviço (serviço de replicação de caixa de correio do Exchange) estava emitindo o erro acima e o processo de migração não pôde ser continuado. Pesquisando pela internet, eu vim por este link que dizia o seguinte:
O GRE do Exchange falha ao abrir quando instalado pela primeira vez ou se forem feitas alterações no servidor IIS. Ele falha com o erro do snap-in e quando você tenta abrir a página do snap-in, o seguinte conteúdo é exibido:
Causa : Este erro ocorre porque o número da porta http 443 já está sendo usado por outro aplicativo e o servidor IIS não está configurado para lidar com várias ligações à mesma porta.
Solução : configure o servidor IIS para lidar com várias ligações de porta. Entre em contato com o fornecedor (Microsoft) para configurá-lo.
Como esses serviços eram oferecidos a partir de um servidor Web IIS, a verificação das ligações no site raiz corrigia o problema. Alguém havia estragado as Ligações ao Site, definindo regras que se sobrepunham e estragando os serviços.
A correção das ligações corretas resolveu o problema, no meu caso, e não precisei configurar o Web.Config.
fonte