Uma das coisas que eu mais sinto falta no universo .Net é a falta de um bom servidor de aplicação.
Um cara como o GlassFish, JBoss, etc. a quem eu possa deixar a cargo toda a responsabilidade de criar e gerenciar pool de conexões, envio de e-mails, etc. e também hospedar as minhas aplicações do tipo webservice.
Estou usando o IIS (Internet Information Services) para tal tarefa e não estou gostando nada disso. Mas enfim, o post é sobre outro assunto ;)
Estava eu criando um serviço utilizando o WCF (Windows Communication Foundation) e o hospedando em um site chamado wcf rodando no IIS em um servidore de desenvolvimento. O deploy foi tranqüilo e quando acessei pelo browser o endereço http://192.xxx.xx.xxx:8081/wcf vi lá listado o meu serviço.
Tudo parecia bem, estranhamente bem, pois nada com a Microsoft é de primeira (ao menos comigo). E Murphy não me abandonou! Quando eu acessei o link do serviço vi que o mesmo estava referenciando o nome da máquina, Anita, na url para o arquivo XML do descritor do serviço (wsdl) e em todos os links dentro dele também está escrito o nome da máquina e não um IP ou o nome do domínio.
Ok. Lá vamos nós procurar no MSDN a sintaxe da configuração do arquivo App.config. Para quem já utilizou os docs da linguagem Java da Sun/Oracle, a MSDN é de chorar.
Encontrei algumas soluções na internet, alterando arquivos de configuração do IIS, etc. até que achei a solução, colocar <behaviors><serviceBehaviors><behavior> a tag <useRequestHeadersForMetadataAddress>, que está descrito na MSDN como: Enables the retrieval of metadata address information from the request message headers. Ou seja, trocando em miúdos, pegar do header das requisições a informação do endereço.
E voilà!
Todos os links dentro do descritor agora estão corretos também.
Para que fique registrada a dica, aqui está a configuração feita no App.config para o exemplo dessa postagem:
<?xml version="1." encoding="utf-8" ?>
<configuration>
<system.web>
<compilation debug="true" />
</system.web>
<system.serviceModel>
<services>
<service name="com.blogspot.jeanjmichel.services.GetGreetingService">
<host>
<baseAddresses>
<add baseAddress = "http://localhost:8081/wcf" />
</baseAddresses>
</host>
<endpoint address =""
binding="basicHttpBinding"
contract="com.blogspot.jeanjmichel.services.contract.IGetGreeting"
bindingNamespace="http://jeanjmichel.blogspot.com/services/v1.0.0" >
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<useRequestHeadersForMetadataAddress>
<defaultPorts>
<add scheme="http" port="8081" />
</defaultPorts>
</useRequestHeadersForMetadataAddress>
<serviceMetadata httpGetEnabled="True"/>
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
quarta-feira, setembro 11, 2013
Assinar:
Postar comentários (Atom)
Um comentário:
muito obrigado kra, salvou minha vida *.*
Postar um comentário