有没有人知道如何在客户端加密数据集并将其发送到Web服务并在那里解密的示例?
另一个问题: 我需要做的是从客户端向Web服务发送数百行数据,并让Web服务使用这些记录更新数据库。如果不使用数据集,我无法想到任何其他方法。有更好的方法吗?
提前致谢!
答案 0 :(得分:2)
就加密而言,为什么要尝试重新发明轮子?只需通过SSL连接到Web服务 - 它最有可能比本土替代品更安全。
我可能会创建一个自定义结构/对象,并将这些数组发送到Web服务而不是DataSet。这将意味着(略微)减少网络流量;它将使webservice的WSDL更具描述性;如果将来有必要,它将使任何非Microsoft应用程序更容易与Web服务进行通信。
编辑:一个例子......
在服务器端,您可以声明自定义类型(例如, ExampleUser ),然后设置您的方法以接受该类型的数组而不是DataSet:
[WebService(Namespace="http://example.yourdomain.com/ExampleWebService/")]
public class ExampleWebService : System.Web.Services.WebService
{
// this is your custom type
public class ExampleUser
{
public int UserID { get; set; }
public string Name { get; set; }
public DateTime DateOfBirth { get; set; }
}
// this is your method
// accepts an array of ExampleUser rather than a DataSet
[WebMethod]
public void UploadUsers(ExampleUser[] usersArray)
{
// do something...
}
}
在客户端应用程序中,您将添加对Web服务的引用。这将使您能够使用上面服务器端代码中声明的ExampleUser类型。
然后,您可以将DataSet转换为ExampleUser对象的数组,然后再将其发送到Web服务:
// get the number of rows in the DataTable
int rowCount = yourDataSet.Tables[0].Rows.Count;
// create an array of ExampleUser with the correct capacity
ExampleWebService.ExampleUser[] usersArray =
new ExampleWebService.ExampleUser[rowCount];
// iterate through each row in the table
for (int i = 0; i < rowCount; i++)
{
DataRow dr = yourDataSet.Tables[0].Rows[i];
// create an ExampleUser object and populate it from the DataRow columns
ExampleWebService.ExampleUser eu = new ExampleWebService.ExampleUser();
eu.UserID = (int)dr["User_ID"];
eu.Name = (string)dr["Name"];
eu.DateOfBirth = (DateTime)dr["Date_Of_Birth"];
// add the ExampleUser object to the array
usersArray[i] = eu;
}
// the array is populated so let's call the webservice
ExampleWebService.UploadUsers(usersArray);
编辑:另一个例子......
如果您使用的是.NET 3.5,那么通过使用LINQ和对象初始化程序创建数组,您可以将客户端简化为几行代码:
// create and populate the array
ExampleWebService.ExampleUser[] usersArray =
yourDataSet.Tables[0].AsEnumerable().Select
(
s => new ExampleWebService.ExampleUser()
{
UserID = (int)s["User_ID"],
Name = (string)s["Name"],
DateOfBirth = (DateTime)s["Date_Of_Birth"]
}
).ToArray();
// the array is populated so let's call the webservice
ExampleWebService.UploadUsers(usersArray);
答案 1 :(得分:0)
嗯,有很多方法可以解决这个问题。由于您是通过线路发送的,您可以:1)将数据写入XML流(这是DataSet的意图)2)您可以压缩XML(压缩率最好是然后3)使用其中一个.NET加密方案进行加密,最后4)将XML解密,解压缩和反序列化为DataSet对象或任何你想用它做的事情。
注意,您可能需要Base64加密的结果。另一种方法是不加密和使用SSL上的Web服务,只使用本机加密。根据数据类型,DataSet可能不是性能方面的最佳选择。您可以发送CSV或JSON样式数据块;这可能会更小,特别是如果DataSet中只有一个“DataTable”对象。就最佳方法的用途而言,很多情况都依赖于情况。