Pergunta

Eu tenho um serviço WCF que faz algumas conversões de documentos e retorna o documento para o chamador. Ao desenvolver localmente no meu servidor dev local, o serviço está hospedado em servidor de desenvolvimento ASP.NET, um aplicativo de console chama a operação e executa em segundos.

Quando eu hospedar o serviço no IIS através de um arquivo .svc, dois dos documentos funcionar corretamente, o terceiro bombas fora, ele começa a construir o documento do Word usando o OpenXml SDK, mas depois é só morre. Eu acho que isso tem algo a ver com o IIS, mas não posso colocar o dedo sobre ele.

Há um total de três tipos de documentos que geram. Em poucas palavras é assim que funciona

SQL 2005 DB / IBM DB2 -> serviço WCF escrito por outro desenvolvedor para expor dados. Este serviço tem apenas um endpoint usando basicHttpBinding

O meu serviço invoca o seu serviço, obtém os dados relevantes, usa o Open XML SDK para gerar um documento do Microsoft Word, salva-o em um servidor e retorna o caminho para o usuário.

Os documentos do Word não são maiores que 100KB.

Também estou usando basicHttpBinding apesar de eu ter tentado wsHttpBinding com os mesmos resultados.

O que é surpreendente é o quão rápido ele é localmente, e ainda mais que dois dos documentos gerar muito bem, é o terceiro tipo de documento que se recusa a trabalho.

Para a mensagem de erro:

Ocorreu um erro ao receber a resposta HTTP para http://myservername.mydomain.inc/ MyService / Service.Svc. Isto pode ser devido ao não vinculativo usando o protocolo HTTP terminal de serviço. Isso também poderia ser devido a um contexto de solicitação HTTP a ser abortada pelo servidor (possivelmente devido ao servidor desligar). Veja os logs do servidor para obter mais detalhes.

Eu passei os últimos 2 dias tentando descobrir o que está acontecendo, eu tentei tudo, inclusive mudando o maxReceivedMessageSize, maxBufferSize, MaxBufferPoolSize, etc, etc, para valores grandes, eu mesmo incluído:

 <httpRuntime maxRequestLength="2097151" executionTimeout="120"/>

Para ver talvez se o IIS foi asfixia por causa disso.

Programatically o serviço faz nada de especial, apenas constrói os documentos do Word a partir dos dados usando o Open XML SDK e como eu disse, localmente todos os 3 documentos trabalhar quando invocado através de um aplicativo de console rodando localmente no servidor asp.net dev, ou seja, http: // localhost: 3332 / myService.svc

Quando eu hospedá-lo em IIS e eu tentar obter um aplicativo do Windows Forms para invocá-lo, eu recebo o erro.

Eu sei que você vai pedir para logs, então sim, eu log habilitado no meu anfitrião.

E há nenhum erro nos logs , estou registrando tudo.

Basicamente invoco duas operações de serviço escritos por outro desenvolvedor.

chamadas MyOperation -> HisOperation1 e depois HisOperation2, ambas as chamadas me dê tipos complexos. Vou olhar para o seu amanhã código, porque ele está usando LINQ2SQL e pode haver algum negócio engraçado acontecendo lá. Ele está usando uma variedade de coleções etc, mas o fato de que eu possa executar o mesmo documento exata, vamos chamá-lo "Documento 3" em questão de segundos quando o serviço está sendo hospedado localmente no ASP WebDev Server é o que é mais estranho, por que ele executado em escala reduzida Cassini e explodir no IIS?

A partir do log que parece, depois de chamar HisOperation1 e HisOperation2 o serviço apenas vai para la-la morre terra, há um pool de aplicativos (w3wp.exe) erro no log de eventos do Windows.

Faulting application w3wp.exe, version 6.0.3790.1830, stamp 42435be1, faulting module kernel32.dll, version 5.2.3790.3311, stamp 49c5225e, debug? 0, fault address 0x00015dfa.

É classificada como .NET 2.0 Runtime erro.

Qualquer ajuda é apreciada, a falta de sono está ficando para mim.

Ajuda me Obi-Wan Kenobi, você é minha única esperança.

Foi útil?

Solução

Sim, nós queremos registos, ou pelo menos alguma idéia do que você está registrando. Eu suponho que você tem tanto mensagem e log de transporte no nível da WCF.

Uma coisa é olhar para as permissões. Quando você executa sob Cassini o servidor web está sendo executado como o usuário conectado no momento. Isto esconde quaisquer problemas de permissão SQL ou CAS (como, vamos ser honestos, a sua conta é geralmente um administrador local). Assim que você publicar no IIS você agora está sendo executado sob o usuário do pool de aplicativos, que é, por padrão, muito mais limitado.

Tente ligar depósitos de depuração do IIS e seguindo os passos em KB919789

Outras dicas

Eu tive essa mensagem aparece:

Ocorreu um erro ao receber a resposta HTTP para http://myservername.mydomain.inc/MyService /Service.Svc . Isto pode ser devido ao não vinculativo usando o protocolo HTTP terminal de serviço. Isso também poderia ser devido a um contexto de solicitação HTTP a ser abortada pelo servidor (possivelmente devido ao servidor desligar). Veja os logs do servidor para obter mais detalhes.

E o problema era que o objeto que eu estava tentando transferência não foi [Serializable]. O objeto estava tentando transferência foi DataTable.

Eu acredito que documentos do Word que você estava tentando transferência também são não serializável para que possa ser o problema.

FYI, eu mudei IIS 6 para o trabalho no IIS 5.0 modo de isolamento e tudo funciona. Odd.

Eu tive o mesmo erro ao usar um DataMember IEnumerable<T> no meu serviço WCF. Descobriu-se que, em alguns casos eu estava voltando de uma IQueryable<T> como um IEnumerable<T>, então tudo que eu tinha que fazer era add .ToList<T>() para minhas declarações LINQ.

Eu mudei o IEnumerable<T> para IList<T> para evitar cometer o mesmo erro novamente.

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