Aqui vai um passo a passo para vencer alguns problemas para desenvolver o REINF.

1) Você vai precisar de um certificado digital.

Se não tiver um, dizem que é possível criar um certificado de teste gratuitamente conforme este site:
https://social.technet.microsoft.com/wiki/pt-br/contents/articles/28398.criando-certificado-digital-para-teste-gratis.aspx

  • Para testes unitários da assinatura (sem transmitir), é possível criar um certificado de teste com o Visual Studio:
  • https://msdn.microsoft.com/en-us/library/bfsktky3(v=VS.100).aspx
  • Visual Studio 2017 Developer Command Prompt
  • makecert -pe -sky signature -sv reinf.pvk reinf.cer
  • pvk2pfx -pvk reinf.pvk -pi Sa113s -spc reinf.cer -pfx reinf.pfx -f

2) Gere o XML do evento R1000 sem identação e espaços inúteis e com declaração do XML (a tag “?xml”). Ele tem que ficar assim (ocultei o CNPJ e os conteúdos gigantes das tags SignatureValue e X509Certificate):

<?xml version=”1.0″ encoding=”utf-8″?><Reinf xmlns=”http://www.reinf.esocial.gov.br/schemas/evtInfoContribuinte/v1_02_00″><evtInfoContri id=”ID1XXXXXXXX0001XX2017112409110500000″><ideEvento><tpAmb>3</tpAmb><procEmi>1</procEmi><verProc>4.4.0</verProc></ideEvento><ideContri><tpInsc>1</tpInsc><nrInsc>XXXXXXXX0001XX</nrInsc></ideContri><infoContri><inclusao><idePeriodo><iniValid>2017-11</iniValid></idePeriodo><infoCadastro><classTrib>99</classTrib><indEscrituracao>1</indEscrituracao><indDesoneracao>0</indDesoneracao><indAcordoIsenMulta>0</indAcordoIsenMulta><indSitPJ>0</indSitPJ><contato><nmCtt>DADOS FICTICIOS</nmCtt><cpfCtt>11111111111</cpfCtt><foneFixo>3132920485</foneFixo></contato></infoCadastro></inclusao></infoContri></evtInfoContri><Signature xmlns=”http://www.w3.org/2000/09/xmldsig#”><SignedInfo><CanonicalizationMethod Algorithm=”http://www.w3.org/TR/2001/REC-xml-c14n-20010315&#8243; /><SignatureMethod Algorithm=”http://www.w3.org/2001/04/xmldsig-more#rsa-sha256&#8243; /><Reference URI=”#ID1XXXXXXXX0001XX2017112409110500000″><Transforms><Transform Algorithm=”http://www.w3.org/2000/09/xmldsig#enveloped-signature&#8221; /><Transform Algorithm=”http://www.w3.org/TR/2001/REC-xml-c14n-20010315&#8243; /></Transforms><DigestMethod Algorithm=”http://www.w3.org/2001/04/xmlenc#sha256&#8243; /><DigestValue>9JQowxNxZJ8/h4kF2mrnx556AmymB0SVN2+fNYxSJ7g=</DigestValue></Reference></SignedInfo><SignatureValue>(ocultei)</SignatureValue><KeyInfo><X509Data><X509Certificate>(ocultei)</X509Certificate></X509Data></KeyInfo></Signature></Reinf>

2.1) Repare no atributo id em:
<evtInfoContri id=”ID1XXXXXXXX0001XX2017112409110500000″>
Esse id deve ser gerado conforme a regra descrita no manual do REINF: ID + Tipo de Inscrição + CPNJ + DATA/HORA + SEQUENCIAL.
A versão original do manual indica apresenta letra maiúscula (Id), mas o certo é tudo minúsculo (id).
O id é muito importante, pois é usado para indicar qual tag será assinada, ou seja, qual tag será usada para computar o DigestValue.

3) Assine o XML do evento. Algumas pessoas dizem que é necessário remover a declaração XML (XmlDeclaration), mas nos meus testes conclui que isso não é necessário.

Para assinar, é importante montar corretamente a URI referenciando o atributo id e usar os algoritmos corretos definidos pelo manual do REINF.

É importante garantir que o XML assinado esteja codificado em UTF8. Antes de descobrir isso, estava ocorrendo este erro:

<codigo>MS0017</codigo><descricao>Assinatura do evento inválida. Assinatura Digital do documento XML é inválida</descricao>

Segue código em C#.

public XmlDocument Assinar(XmlDocument documento, string id)
{
if (documento == null)
throw new ArgumentNullException(“documento”);
if(this.Certificado == null)
throw new InvalidOperationException(“certificado”);

Reference reference = new Reference();
reference.Uri = “#” + id; //referencia a tag que será usada para computar a assinatura

XmlDsigEnvelopedSignatureTransform env = new XmlDsigEnvelopedSignatureTransform();
reference.AddTransform(env);

XmlDsigC14NTransform c14 = new XmlDsigC14NTransform();
reference.AddTransform(c14);

reference.DigestMethod = “http://www.w3.org/2001/04/xmlenc#sha256&#8221;;

KeyInfo keyInfo = new KeyInfo();

keyInfo.AddClause(new KeyInfoX509Data(this.Certificado));

XmlDocument documentoUTF8 = ReconstruirComoUTF8(documento);

SignedXml signature = new SignedXml(documentoUTF8);
signature.SigningKey = this.Certificado.PrivateKey;
signature.AddReference(reference);
signature.KeyInfo = keyInfo;
signature.SignedInfo.SignatureMethod = “http://www.w3.org/2001/04/xmldsig-more#rsa-sha256&#8221;;
signature.ComputeSignature();

documentoUTF8.DocumentElement.AppendChild(documentoUTF8.ImportNode(signature.GetXml(), true));
return documentoUTF8;
}

private XmlDocument ReconstruirComoUTF8(XmlDocument documento)
{
//sem isso dava: Assinatura do evento inválida. Assinatura Digital do documento XML é inválida
var bytes = System.Text.Encoding.UTF8.GetBytes(documento.OuterXml);
var rawDocumentoUTF8 = System.Text.Encoding.UTF8.GetString(bytes);
XmlDocument documentoUTF8 = new XmlDocument();
documentoUTF8.LoadXml(rawDocumentoUTF8);
return documentoUTF8;
}

4) Agora monte o XML final. Segue abaixo uma solicitação completa (ocultei o CNPJ e os conteúdos gigantes das tags SignatureValue e X509Certificate):

<?xml version=”1.0″ encoding=”utf-8″?>
<soap:Envelope
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance&#8221;
xmlns:xsd=”http://www.w3.org/2001/XMLSchema&#8221;
xmlns:soap=”http://schemas.xmlsoap.org/soap/envelope/&#8221;
xmlns:sped=”http://sped.fazenda.gov.br/”&gt;
<soap:Header></soap:Header>
<soap:Body>
<sped:ReceberLoteEventos>
<sped:loteEventos>
<Reinf xmlns=”http://www.reinf.esocial.gov.br/schemas/envioLoteEventos/v1_02_00″&gt;
<loteEventos><evento id=”ID1XXXXXXXX0001XX2017112409110500000″><Reinf xmlns=”http://www.reinf.esocial.gov.br/schemas/evtInfoContribuinte/v1_02_00″><evtInfoContri id=”ID1XXXXXXXX0001XX2017112409110500000″><ideEvento><tpAmb>3</tpAmb><procEmi>1</procEmi><verProc>4.4.0</verProc></ideEvento><ideContri><tpInsc>1</tpInsc><nrInsc>XXXXXXXX0001XX</nrInsc></ideContri><infoContri><inclusao><idePeriodo><iniValid>2017-11</iniValid></idePeriodo><infoCadastro><classTrib>99</classTrib><indEscrituracao>1</indEscrituracao><indDesoneracao>0</indDesoneracao><indAcordoIsenMulta>0</indAcordoIsenMulta><indSitPJ>0</indSitPJ><contato><nmCtt>DADOS FICTICIOS</nmCtt><cpfCtt>11111111111</cpfCtt><foneFixo>3132920485</foneFixo></contato></infoCadastro></inclusao></infoContri></evtInfoContri><Signature xmlns=”http://www.w3.org/2000/09/xmldsig#”><SignedInfo><CanonicalizationMethod Algorithm=”http://www.w3.org/TR/2001/REC-xml-c14n-20010315&#8243; /><SignatureMethod Algorithm=”http://www.w3.org/2001/04/xmldsig-more#rsa-sha256&#8243; /><Reference URI=”#ID1XXXXXXXX0001XX2017112409110500000″><Transforms><Transform Algorithm=”http://www.w3.org/2000/09/xmldsig#enveloped-signature&#8221; /><Transform Algorithm=”http://www.w3.org/TR/2001/REC-xml-c14n-20010315&#8243; /></Transforms><DigestMethod Algorithm=”http://www.w3.org/2001/04/xmlenc#sha256&#8243; /><DigestValue>9JQowxNxZJ8/h4kF2mrnx556AmymB0SVN2+fNYxSJ7g=</DigestValue></Reference></SignedInfo><SignatureValue>(ocultei)</SignatureValue><KeyInfo><X509Data><X509Certificate>(ocultei)</X509Certificate></X509Data></KeyInfo></Signature></Reinf></evento></loteEventos>
</Reinf>
</sped:loteEventos>
</sped:ReceberLoteEventos>
</soap:Body>
</soap:Envelope>

4.1) Usei o id do lote igual ao id do evento. O manual não fala muito sobre o id do lote. Até achei que tinha que ser diferente, mas testei igual e diferente (mudando o sequencial) e não deu problema em nenhum dos dois casos.

4.2) Não testei se faz diferença, mas em C# usei: xmlEventos.PreserveWhitespace = false;

4.3) Se tiver fazendo a requisição, confira o SOAPAction e não esqueça de adicionar o certificado:

request.Headers.Add(“SOAPAction”, @”http://sped.fazenda.gov.br/RecepcaoLoteReinf/ReceberLoteEventos&#8221;);
request.ClientCertificates.Add(this.Certificado);

5) Eis um exemplo de retorno com sucesso:

<s:Envelope xmlns:s=”http://schemas.xmlsoap.org/soap/envelope/”><s:Body xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance&#8221; xmlns:xsd=”http://www.w3.org/2001/XMLSchema”><ReceberLoteEventosResponse xmlns=”http://sped.fazenda.gov.br/”><ReceberLoteEventosResult><Reinf xmlns=”http://www.reinf.esocial.gov.br/schemas/retornoLoteEventos/v1_02_00″><retornoLoteEventos id=”ID84B630F4297DEA9331BBFEAD87B54C3C”><ideTransmissor><IdTransmissor>XXXXXXXX0001XX</IdTransmissor></ideTransmissor><status><cdStatus>0</cdStatus><descRetorno>SUCESSO</descRetorno></status><retornoEventos><evento id=”ID1XXXXXXXX0001XX2017112408574800001″><Reinf xmlns=”http://www.reinf.esocial.gov.br/schemas/retornoEvento/v1_02_00″><retornoEvento id=”ID2041693781″><ideContrib><tpInsc>1</tpInsc><nrInsc>XXXXXXXX0001XX</nrInsc></ideContrib><dadosRecepcaoEvento><dhProcessamento>2017-11-24T08:57:51.2433996-02:00</dhProcessamento><tipoEvento>1000</tipoEvento><idEvento>ID1XXXXXXXX0001XX2017112408574800000</idEvento><hash>K/73wNsvr6uJEhimftYrKIGSX8BO5bG9b5bR5mV3g+Q=</hash></dadosRecepcaoEvento><status><cdRetorno>0</cdRetorno><descRetorno>SUCESSO</descRetorno></status><dadosReciboEntrega><numeroRecibo>3865-05-1000-1711-3865</numeroRecibo></dadosReciboEntrega></retornoEvento><Signature xmlns=”http://www.w3.org/2000/09/xmldsig#”><SignedInfo><CanonicalizationMethod Algorithm=”http://www.w3.org/TR/2001/REC-xml-c14n-20010315″/><SignatureMethod Algorithm=”http://www.w3.org/2001/04/xmldsig-more#rsa-sha256″/><Reference URI=”#ID2041693781″><Transforms><Transform Algorithm=”http://www.w3.org/2000/09/xmldsig#enveloped-signature”/><Transform Algorithm=”http://www.w3.org/TR/2001/REC-xml-c14n-20010315″/></Transforms><DigestMethod Algorithm=”http://www.w3.org/2001/04/xmlenc#sha256″/><DigestValue>3Lmi/BnmN4Dbchw3JiP1NLv9MFRs5S9oMc9k7VI3bPA=</DigestValue></Reference></SignedInfo><SignatureValue>(ocultei)</SignatureValue><KeyInfo><X509Data><X509Certificate>(ocultei)</X509Certificate></X509Data></KeyInfo></Signature></Reinf></evento></retornoEventos></retornoLoteEventos><Signature xmlns=”http://www.w3.org/2000/09/xmldsig#”><SignedInfo><CanonicalizationMethod Algorithm=”http://www.w3.org/TR/2001/REC-xml-c14n-20010315″/><SignatureMethod Algorithm=”http://www.w3.org/2001/04/xmldsig-more#rsa-sha256″/><Reference URI=”#ID84B630F4297DEA9331BBFEAD87B54C3C”><Transforms><Transform Algorithm=”http://www.w3.org/2000/09/xmldsig#enveloped-signature”/><Transform Algorithm=”http://www.w3.org/TR/2001/REC-xml-c14n-20010315″/></Transforms><DigestMethod Algorithm=”http://www.w3.org/2001/04/xmlenc#sha256″/><DigestValue>dxC3pujf3xMabNEUTTYaACPPougGdCbKtvdBOJZMgi0=</DigestValue></Reference></SignedInfo><SignatureValue>(ocultei)</SignatureValue><KeyInfo><X509Data><X509Certificate>(ocultei)</X509Certificate></X509Data></KeyInfo></Signature></Reinf></ReceberLoteEventosResult></ReceberLoteEventosResponse></s:Body></s:Envelope&gt;

6) Eis um exemplo de retorno com erro:

<s:Envelope xmlns:s=”http://schemas.xmlsoap.org/soap/envelope/”><s:Body xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance&#8221; xmlns:xsd=”http://www.w3.org/2001/XMLSchema”><ReceberLoteEventosResponse xmlns=”http://sped.fazenda.gov.br/”><ReceberLoteEventosResult><Reinf xmlns=”http://www.reinf.esocial.gov.br/schemas/retornoLoteEventos/v1_02_00″><retornoLoteEventos id=”ID5368CFE13BA3BCF5A995B5B520F43139″><ideTransmissor><IdTransmissor>XXXXXXXX0001XX</IdTransmissor></ideTransmissor><status><cdStatus>0</cdStatus><descRetorno>SUCESSO</descRetorno></status><retornoEventos><evento id=”ID1XXXXXXXX0001XX2017112316423400001″><Reinf xmlns=”http://www.reinf.esocial.gov.br/schemas/retornoEvento/v1_02_00″><retornoEvento id=”ID1050126439″><ideContrib><tpInsc>1</tpInsc><nrInsc>XXXXXXXX0001XX</nrInsc></ideContrib><dadosRecepcaoEvento><dhProcessamento>2017-11-23T16:42:40.4774646-02:00</dhProcessamento><tipoEvento>1000</tipoEvento><idEvento>ID1XXXXXXXX0001XX2017112316423400000</idEvento><hash>dHME03m8CaWtebKFFhYoRdWZAfnkRmwJfpoOCh/f2sI=</hash></dadosRecepcaoEvento><status><cdRetorno>1</cdRetorno><descRetorno>ERRO</descRetorno><dadosRegistroOcorrenciaEvento><ocorrencias><tipo>1</tipo><localizacaoErroAviso/><codigo>MS0017</codigo><descricao>Assinatura do evento inválida. Assinatura Digital do documento XML é inválida</descricao></ocorrencias></dadosRegistroOcorrenciaEvento></status></retornoEvento><Signature xmlns=”http://www.w3.org/2000/09/xmldsig#”><SignedInfo><CanonicalizationMethod Algorithm=”http://www.w3.org/TR/2001/REC-xml-c14n-20010315″/><SignatureMethod Algorithm=”http://www.w3.org/2001/04/xmldsig-more#rsa-sha256″/><Reference URI=”#ID1050126439″><Transforms><Transform Algorithm=”http://www.w3.org/2000/09/xmldsig#enveloped-signature”/><Transform Algorithm=”http://www.w3.org/TR/2001/REC-xml-c14n-20010315″/></Transforms><DigestMethod Algorithm=”http://www.w3.org/2001/04/xmlenc#sha256″/><DigestValue>12DpOHfYUsX3eSQfiv2DmsmdXZ1ZxY3qzl4gU3sIfX8=</DigestValue></Reference></SignedInfo><SignatureValue>(ocultei)</SignatureValue><KeyInfo><X509Data><X509Certificate>(ocultei)</X509Certificate></X509Data></KeyInfo></Signature></Reinf></evento></retornoEventos></retornoLoteEventos><Signature xmlns=”http://www.w3.org/2000/09/xmldsig#”><SignedInfo><CanonicalizationMethod Algorithm=”http://www.w3.org/TR/2001/REC-xml-c14n-20010315″/><SignatureMethod Algorithm=”http://www.w3.org/2001/04/xmldsig-more#rsa-sha256″/><Reference URI=”#ID5368CFE13BA3BCF5A995B5B520F43139″><Transforms><Transform Algorithm=”http://www.w3.org/2000/09/xmldsig#enveloped-signature”/><Transform Algorithm=”http://www.w3.org/TR/2001/REC-xml-c14n-20010315″/></Transforms><DigestMethod Algorithm=”http://www.w3.org/2001/04/xmlenc#sha256″/><DigestValue>2pAeOQQ5kr4E32SnaQ5gj6sPk8ZvriAey0IKB6/R9hU=</DigestValue></Reference></SignedInfo><SignatureValue>(ocultei)</SignatureValue><KeyInfo><X509Data><X509Certificate>(ocultei)</X509Certificate></X509Data></KeyInfo></Signature></Reinf></ReceberLoteEventosResult></ReceberLoteEventosResponse></s:Body></s:Envelope&gt;

7) Se você receber um retorno com a mensagem “O servidor remoto retornou um erro: (500) Erro Interno do Servidor.”, verifique a tag “faultstring” dentro do XML retornado para saber a mensagem de erro de verdade.

Advertisements

O Power BI é muito bom, mas comprar a licença é uma aventura.

Se você não estiver pastando pra comprar a licença PRO porque tem que ter uma conta no Office 365 e ser o administrador, mas ninguém te fala como que se faz isso, vai nesse link, faça o login e clique em “admin”.

https://www.office.com/?auth=2

Que vai te levar para:

https://portal.office.com/admintakeover

Problema:

Ninguém sabe usuário e senha do Microsoft SQL Server.

Solução:

  1. Acessar o servidor onde o Microsoft SQL Server está instalado.
  2. Executar o prompt (cmd) como administrador.
  3. Parar o serviço do Microsoft SQL Server:
    1. Net Stop MSSQLServer

  4. Iniciar o serviço do Microsoft SQL Server no modo single user:
    1. net start MSSQLServer /m SQLCMD

  5. Alterar a senha do usuário sa (provável nome do administrador):
    1. alter login sa with password=’senha_decente_a_sua_escolha’

  6. Parar o serviço, porque ele está no modo single user, e reiniciar no modo normal.
    1. net stop MSSQLServer

    2. net start MSSQLServer

Outros cenários:

  • Se o serviço do Microsoft SQL Server não é a instância default, é necessário especificar o nome da instância ao parar e iniciar o serviço.
  • Se o usuário sa não existir, pode ser criado com CREATE LOGIN, mas também é necessário dar as devidas permissões.
  • O usuário sa pode existir e não estar habilitado. Ele pode ser habilitado com ALTER LOGIN sa ENABLE.

Problema:

Como se não bastassem os impostos, ainda temos que perder horas e horas de trabalho resolvendo problemas que o Governo cria.

Dessa vez, parece que mudaram os certificados remotos lá na SEFAZ MG e os novos certificados usam novos certificados de autoridades raiz, ou certificados de autoridades certificadoras raiz, ou raízes de certificação autoritárias, ou monstros plantas ditadores certinhos, sei lá (já estou até me perdendo nos termos de tanta energia gasta nisso).

Como as novas autoridades não eram reconhecidas nas máquinas dos usuários, começou a ocorrer o seguinte erro:

“A conexão subjacente estava fechada: Não foi possível estabelecer relação de confiança para o canal seguro de SSL/TLS.
O certificado remoto é inválido, de acordo com o procedimento de validação.”

Hipóteses:

Para estabelecer o canal seguro, o usuário deve usar um certificado válido (certificado cliente) e o certificado da SEFAZ (do webservice, certificado remoto) tem que ser reconhecido pelo computador do usuário como um certificado válido.

Para reconher o certificado remoto como válido, tal certificado deve ser validado por uma entidade certificadora. E essa entidade certificadora deve ser reconhecida como legítima pela máquina do usuário.

Aparentemente, o problema começou porque a SEFAZ MG mudou o certificado dos seus webservices no dia 08/06/2017 (certificado remoto). Isso ocorre anualmente e normalmente não é um problema, mas dessa vez o novo certificado usava uma nova “raiz certificadora”. E as máquinas dos usuários não reconheciam essa nova raiz certificadora.

Portanto, a solução é instalar os certificados da raiz certificadora e configurar o Windows para reconhecê-lo como confiável.

O que ficou mal explicado é porque algumas máquinas tiveram problemas e outras não. E porque algumas máquinas ficaram intermitentes, ou seja, alternavam períodos de funcionamento pleno e períodos com esse impedimento. Uma hipótese levantada foi uma arquitetura distribuída da SEFAZ, onde alguns clusters poderiam ainda estar funcionando com um certificado antigo, então seria uma “roleta russa”.

Solução:

A solução é instalar os certificados de autoridades raiz e configurá-los como confiáveis no Windows.

1) Obter os certificados de autoridades raiz.

Use uma URL de um webservice da SEFAZ.

Por exemplo, a SEFAZ MG tem essa lista de webservices: http://portalnfe.fazenda.mg.gov.br/web_services.html

Um deles que pode ser usado é a consulta de status do serviço:
https://nfe.fazenda.mg.gov.br/nfe2/services/NfeStatus2

Acesse essa URL com o Mozilla.
Ele vai reclamar: “Sua conexão não é segura”.
Clique em “avançado”, “adicionar exceção”, “ver (X)…”.
Na aba “detalhes”, selecionar os certificados raiz e exportá-los. No caso, foram: “Autoridade Certificadora Raiz Brasileira v5”, “AC Certisign G7”, “AC Certisign Multipla SSL”.

2) Instalar os certificados.

Localize os arquivos dos certificados e use um duplo clique para instalar cada um dos certificados, de preferência na ordem hierárquica deles. Isso talvez tenha que ser feito para cada usuário da máquina. Siga o wizard de instalação, usando a opção de deixar o Windows determinar o melhor repositório.

3) Configurar os certificados como confiáveis.

Abra o mmc (tecle windows+R e digite mmc).
Vá no menu “arquivo”,
“adicionar/remover snap-in…”,
selecione “certificados” na lista,
clique em “adicionar”,
“minha conta de usuário”,
depois “ok”.

Agora, você deve localizar o certificado que você acabou de instalar.
Só precisa localizar o mais alto da hierarquia.
No caso, é o “Autoridade Certificadora Raiz Brasileira v5”
Provavelmente você o encontra (na árvore) em “Autoridades de Certificação Intermediária” / “Certificados”.
Arraste-o para “Autoridades de Certificação Raiz Confiáveis” / “Certificados”.

 

 

Problema:

Calcular interseção entre dois períodos no Excel.

Solução:

=MAX(0;MIN(J2;L2)-MAX(I2;K2)+1)

onde o primeiro período está nas céluas I e J, equanto o segundo período está nas células I K e L, sendo cada célula uma data.

Cenário:

Cliente angular.js consome webservice asp.net, que retorna json. ¹

No meu caso, ainda tem PhoneGap e Android no caminho.

Problemas:

  1. CORS
  2. O webservice retorna o json dentro de um XML.

Soluções:

Tratar CORS no cabeçalho, mudar o tipo de conteúdo da resposta e não usar retorno no método.

[WebMethod]
public void ListSprints()
{
string json = @”[{ “”x””: 1, “”y””: 2 }, { “”x””: 2, “”y””: 7 }]”;
this.Context.Response.AddHeader(“Access-Control-Allow-Origin”, “*”);
this.Context.Response.ContentType = “application/json; charset=utf-8”;
this.Context.Response.Write(json);

}

 

¹ Menos de 2% da população mundial² que fala português é capaz de entender a frase inicial.

² É sabido que 17.13% das estatísticas no mundo são falsas.

Problema:

Criei um webservice que funcionava perfeitamente no ambiente de desenvolvimento. Entretanto, no ambiente de produção, se eu tentasse usá-lo no navegador (link do arquivo .asmx), ocorria um erro…

Putz, esqueci a mensagem de erro!

Solução:

Tudo que encontrei na web sobre o erro dizia que era necessário acrescentar os protocolos GET e POST no web.config, porque o IIS não os habilita por default.

Bem, pode até ser verdade, mas isso já estava feito. O que resolveu mesmo foi adicionar o “Documentation”. Então, o web.config fica assim:

<configuration>
<system.web>
<webServices>
<protocols>
<add name=”HttpGet”/>
<add name=”HttpPost”/>
<add name=”HttpSoap”/>
<add name=”Documentation”/>
</protocols>
</webServices>
</system.web>
</configuration>

Rapidinha:

Exemplo gerar números aleatórios no SQL Server:

ABS(CHECKSUM(NewId())) % 100 --de 0 a 99

Fonte/Créditos

Problema:

Os jogos no meu computador ficaram extremamente lentos – PES 2016 e D&D Neverwinter, ambos no Steam.

Investigação:

No gerenciador de tarefa, o uso de memória, processador, disco e rede estava normal.

Abri o visualizador de eventos do Windows no painel de controle e verifiquei que o Windows Update tinha instalado a atualização KB3156421 no dia anterior.

Encontrei os seguintes links acusando essa atualização de causar problemas semelhantes.

http://www.baboo.com.br/windows/atualizacao-kb3156421-para-windows-10-pode-deixar-alguns-pcs-lentos/

https://www.reddit.com/r/Windows10/comments/4iqaig/kb3156421_computer_is_slow_after_installing/

Alguém sugerir desabilitar o Cortana, mas isso nem funciona para português, ou seja, no meu caso, já estava desabilitado.

Solução:

Removi a atualização KB3156421. Com isso, a performace melhorou, mas não resolveu totalmente. Voltei no visualizador de eventos e verifiquei que havia outra atualização dois dias antes. Removi essa também e, então, tudo voltou ao normal. Infelizmente, não guardei o código dessa outra atualização.

 

NETFLIX: ninguém sai

Posted: May 9, 2016 in Uncategorized

Problema:

Depois que alterei minha senha do NETFLIX, não consegui mais usar o NETFLIX na TV Philips e no XBOX.

A questão por trás disso é que os aplicativos nos dois aparelhos já estavam “logados” com a senha antiga e o NETFLIX não me pediu para entrar a nova senha, simplesmente dava a seguinte mensagem de erro:

“desculpe. algo deu errado. houve um problema ao trocar o seu perfil”

Isso poderia ser facilmente contornado, se o aplicativo tivesse uma opção clara de “logout”. Assim, eu poderia sair e entrar de novo com a nova senha.

E a solução é exatamente essa: sair e entrar de novo com a nova senha. Mas o macete é como sair.

Solução:

  1. Abrir o aplicativo do NETFLIX.
  2. Digitar essa sequência no controle remoto: cima, cima, baixo, baixo, esquerda, direita, esquerda, direita, cima, cima, cima, cima. É bizzaro, mas é isso mesmo. Pode ser em qualquer momento (tela) do aplicativo.
  3. O aplicativo abre uma tela de ajuda.
  4. Escolha a opção “Sair“.
    • Mas, atenção, é “sair”, NÃO é “sair do NETFLIX”.
    • “Sair” faz o logout.
    • “Sair do NETFLIX” só fecha o NETFLIX.
  5. Você vai ver o seguinte erro:
    • “a netflix encontrou um erro. tentando exibir…”

  6. Desligue o aparelho. Por via das dúvidas, desligue da tomada e espere um minuto.
  7. Religue o aparelho, abra o aplicativo do NETFLIX, digite a nova senha.
  8. Assita Kung Fury. Mas esse passo é opcional 🙂