.NET Compact Framework,WCF服务,压缩和DIGEST认证

| 我正在尝试将许多功能放在一起,由于.NET Compact Framework的局限,事实证明这越来越困难。 具体来说,我有WCF服务,并且正在为此编写一个移动设备客户端。抓住?我想使用某种数据压缩(由于连接到所述设备的调制解调器速度非常慢)和HTTP DIGEST身份验证(托管WCF服务的站点上已经存在该身份验证)。 我已经按照该博客文章的内容获取了WCF服务客户端所需的压缩和生成的代码。 但是,我正在努力解决HTTP DIGEST。我不知道如何添加此功能。 以前,我不使用压缩,因此我使用SOAP,使用简单的WebService引用连接到WCF服务,并添加HTTP DIGEST,因此必须重写
GetWebRequest
方法并手动添加所需的标头。这次围绕生成的类似乎没有什么余地,我没有太多可以覆盖的。同样,所有安全性或身份验证参数似乎都是针对SSL设计的,而不是针对此类基本身份验证方案的。 总结:如何使用.NET Compact Framework使用压缩和HTTP DIGEST身份验证创建WCF客户端? 编辑: 这是我目前拥有的代码:
        System.ServiceModel.Channels.CustomBinding customBinding = new System.ServiceModel.Channels.CustomBinding();
        CompressionMessageEncodingBindingElement compressionBindingElement = new CompressionMessageEncodingBindingElement();
        customBinding.Elements.Add(compressionBindingElement);
        HttpTransportBindingElement httpBindingElement = new HttpTransportBindingElement();
        customBinding.Elements.Add(httpBindingElement);
        EndpointAddress endPoint = new EndpointAddress(\"http://localhost:5100/Service.svc\");
        ServiceClient client = new ServiceClient(customBinding, endPoint);
我怀疑我需要以某种方式将HTTP DIGEST功能添加到
CustomBinding
类,但是我不知道如何。 我怀疑我还应该注意,当我使用.NET Compact Framework 3.5时,正在创建Windows CE应用程序。因此,我不必下载Windows Mobile 6 SDK。如果这些SDK添加了可在Window CE应用程序中使用的功能,并且这些功能是HTTP DIGEST正常运行所必需的,请告诉我。     
已邀请:
        我们最终对运行.NET CF的设备禁用了DIGEST身份验证。它不是那么安全,但是我们发现在我们的情况下,运行.NET CF的设备发送和检索的数据不那么敏感,因此我们要做的就是验证它。     
        如果客户端在.NET Compact Framework 3.5上运行,则可以使用WCF调用服务,并使用对HTTP Digest身份验证的内置支持,而无需SSL。 这是通过编程方式配置WCF客户端以将Digest身份验证与BasicHttpBinding结合使用的方法:
var binding = new BasicHttpBinding();
binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Digest;
var endpoint = new EndpointAddress(\"http://server/myservice\");
var client = new MyServiceClient(binding, endpoint);

// We have to set the actual credentials on the client proxy object
// before invoking the service:
client.ClientCredentials.HttpDigest.ClientCredential.UserName = \"me\";
client.ClientCredentials.HttpDigest.ClientCredential.Password = \"password\";

try
{
    client.MyServiceOperation();
    client.Close();
}
catch
{
    client.Abort();
}
相关资源: .NET Compact Framework 3.5支持的WCF子集 WCF针对移动开发人员的指南(有关HTTP摘要认证的信息,请参阅第66页)     
        实现此目的的唯一方法是(手动)使用HttpWebRequest并指定ClientCredentials,而不是从不支持身份验证的NetCFSvcUtil生成的类。 它在带有WCF的CF上支持的唯一WS-Security规范是通过相互证书交换有效地使用消息安全性。 (顺便说一下,这有一个内存泄漏,我发现这是:http://connect.microsoft.com/VisualStudio/feedback/details/727247/native-memory-leak-in-wcf-proxy-client-with-相互证书安全性,在网络上,紧凑框架,在Windows ce-6-0上3-5) 值得注意的是,生成的“ 4”还存在可以解决的内存泄漏,请参阅:http://geekswithblogs.net/GruffCode/archive/2013/03/31/memory-leak-in-cfclientbaselttgt-service-proxy-for -compact-framework-.net.aspx 供参考:NetCF支持的WCF子集:http://blogs.msdn.com/b/andrewarnottms/archive/2007/08/21/the-wcf-subset-supported-by-netcf.aspx     

要回复问题请先登录注册