Programação de rede no .NET Compact Framework
O .NET Compact Framework fornece suporte interno para XML Web Services e fornece o seguinte suporte a protocolo e a funcionalidade:
Protocolos baseados em HTTP.
Autenticação NTLM.
Conteúdo XML codificado por SOAP.Esse suporte inclui a passagem de datasets ADO.NET.
Métodos Web Request e Web Response que podem enviar mensagens HTTP SOAP e receber mensagens SOAP como resposta.
Bibliotecas SOAP e métodos podem serializar e deserializar chamadas de métodos e objetos arbitrários nas ou a partir das mensagens XML SOAP.
Solicitações HTTP
Os seguintes itens dizem respeito ao ato de enviar e receber solicitações HTTP:
Ao usar o emulador, não use localhost para o nome do servidor.Especifique o nome do computador ou endereço IP do seu computador de desenvolvimento que hospeda o serviço da Web.
O emulador, como um dispositivo, tem seu próprio endereço IP.Usando localhost instrui-se o emulador a usar a si próprio para conectar-se ao serviço da Web, em vez do serviço da Web hospedado pelo seu ambiente de desenvolvimento ou outro computador desktop.
Por exemplo, em vez do seguinte:
https://localhost/myWebService/Service1.asmx
Especifique o seguinte:
http://ComputerName/myWebService/Service1.asmx
Quando você faz uma solicitação HTTP usando HttpWebRequest, o dispositivo inicia uma nova conexão de rede se uma não estiver disponível. Portanto, fazer uma solicitação HTTP para determinar somente se uma conexão está disponível pode causar no dispositivo a tentativa de iniciar uma conexão, por exemplo uma conexão GPRS.
O .NET Compact estrutura não armazena informações sobre proxy no GlobalProxySelection.Select propriedade, mas usa essa propriedade para conexões HTTP se você especificar um valor em seu código.
Para conexão com a Internet, talvez seja necessário especificar as configurações de proxy local.O código a seguir mostra a configuração do proxy para porta 80:
System.Net.GlobalProxySelection.Select = new WebProxy("http://myproxy:80");
Se você conjunto AllowWriteStreamBuffering para false, os dados não será possível em buffer na memória e não oferecerão suporte para quaisquer solicitações de autenticação ou redirecionamentos pelo servidor Web.
Para garantir êxito nas operações, especifique informações sobre o caminho absoluto.
Observe o seguinte comportamento do Windows CE na determinação de especificações relativas a arquivo:
file://myfile é determinado sistema autônomo \\myfile.
file:///myfile é determinado sistema autônomo \myfile no diretório raiz.
É um conhecido que emitir o.NET estrutura Dns.GetHostName método lança uma exceção quando houver mais de 50 protocolos de rede instalados na computador corrente.
Para contornar esse problema, desinstale os protocolos de rede que realmente não são necessários.Uma maneira para fazer isso é usar o Gerenciador de Dispositivos Windows para remover adaptadores de rede não utilizados.Outra maneira consiste em desinstalar aplicativos que tiverem protocolos instalados.
Comunicações móveis seguras
Há dois principais meios para proteger as comunicações móveis:
Autenticação HTTP
O .NET Compact Framework suporta autenticação Basic e Digest.Esses mecanismos de autenticação são simples, e sua segurança e compensações são muito conhecidas – uma sendo que o serviço da Web é limitado a uma vinculação HTTP.
O .NET Compact Framework versão 2.0 oferece suporte a servidores executando NTLM ou Kerberos ("Windows Integrated Authentication"), que não requer qualquer alteração de código para autenticação Basic ou Digest existente.
Cabeçalhos de segurança personalizados
O .NET Compact Framework não oferece atualmente suporte a Web Service Security (WS-Security) e Web Service Enhancements (WSE).
Além disso, se você autenticar usando HTTP ou um cabeçalho personalizado, você pode usar o SSL para aumentar a segurança.A Basic Authentication passa o nome e senha em texto não criptografado, assim não é particularmente seguro a menos que se execute com o SSL.Entretanto, quando usado em conjunto com o SSL, é relativamente seguro, sendo o único problema importante uma acidental revelação de credenciais para o servidor de destino.
Observação: O .NET Compact estrutura não dá suporte a autenticação de cliente usando X 509 certificados.
Considerações no comprimento de conteúdo
Ao enviar um solicitação HTTP da Web do conteúdo em fluxo usando o protocolo POST, você deve especificar um tamanho de conteúdo.Supondo que SendChunked é false e Method = POST, especifique um valor para ContentLength.
O .NET Compact Framework diferentemente do .NET Framework completo, não armazena temporariamente dados antes para acomodar considerações de restrição de memória.Para garantir o armazenamento, defina SendChunked para false.
Um fluxo de solicitação com comprimento de conteúdo igual a zero causa um ObjectDisposedException Se ele não foi obtido e fechado corretamente. Para manipular sistema autônomo solicitações de comprimento zero de conteúdo, você deve chamar explicitamente o GetRequestStream método e, em seguida, chame o Close método no fluxo retornado sem telefonar a Write método, conforme mostrado pelo seguinte exemplo de código.
private static void ZeroLengthRequest()
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(
requestUri + "?dummy=true");
request.AllowWriteStreamBuffering = true;
request.Credentials = CredentialCache.DefaultNetworkCredentials;
request.Credentials = netCred;
request.ConnectionGroupName = "mygroup";
request.ContentLength = 0;
request.KeepAlive = true;
request.Method = "POST";
request.ServicePoint.UseNagleAlgorithm = false;
request.Timeout = System.Threading.Timeout.Infinite;
request.UnsafeAuthenticatedConnectionSharing = true;
Stream req = request.GetRequestStream();
req.Close();
using (request.GetResponse())
{
...
}
}
Private Shared Sub ZeroLengthRequest()
Dim request As HttpWebRequest = _
CType(WebRequest.Create(requestUri + "?dummy=true"), _
HttpWebRequest)
request.AllowWriteStreamBuffering = true
request.Credentials = CredentialCache.DefaultNetworkCredentials
request.Credentials = netCred
request.ConnectionGroupName = "mygroup"
request.ContentLength = 0
request.KeepAlive = true
request.Method = "POST"
request.ServicePoint.UseNagleAlgorithm = false
request.Timeout = System.Threading.Timeout.Infinite
request.UnsafeAuthenticatedConnectionSharing = true
Dim req As Stream = request.GetRequestStream
req.Close
request.GetResponse
End Sub