我有一个代码:
Session [“timestamp”]中有一个字节数组,使用LInq to Entity
现在,当我调用此函数时,它会抛出错误
网络服务的签名如下:
[WebMethod]
public string IsRowChanged(int en_id , byte[] timestamp)
{
}
如果我用字符串替换byte []到处都可以。
$.ajax({
type: "POST",
url: "UpdateEntityService.asmx/IsRowChanged",
data: "{ 'en_id':'" + '<%= Request.QueryString["entity_id"] == null ? "1" : Request.QueryString["entity_id"] %>' + "' , 'timestamp': '" + '<%= (Session["timestamp"]) %>' + "' }",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
var result = msg.d;
if (result == "0") {
save_valid();
$.prompt("Data Saved Sucessfully");
}
else {
$.prompt("Data Concurrency Error! Reload the Page.. by pressing F5");
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(textStatus);
alert(textStatus);
alert(errorThrown);
}
});
感谢任何帮助。
答案 0 :(得分:5)
您应该对二进制数据进行基本编码,然后在服务器端将其转换回byte []。
// returns a byte[]
System.Convert.FromBase64String(base64String);
// returns a string
System.Convert.ToBase64String(byteData);
答案 1 :(得分:4)
试试这个。将其作为字符串传递并将其转换为函数内的ByteArray
[WebMethod]
public string IsRowChanged(int en_id , string ts)
{
byte[] timestamp = Encoding.UTF8.GetBytes(ts);
// rest of your function here
}
如果您不知道编码类型,请使用此功能
private byte[] ConvertStringToBytes(string input)
{
MemoryStream stream = new MemoryStream();
using (StreamWriter writer = new StreamWriter(stream))
{
writer.Write(input);
writer.Flush();
}
return stream.ToArray();
}
使用的命名空间:using System.IO;
关键是,无论使用哪种编码,都使用相同的解码方法来检索它。以下是ASCII编码/解码的示例
在你的页面编码就像这样。
string value = ASCIIEncoding.ASCII.GetString(temp_array);
HttpContext.Current.Session["timestamp"] = value;
现在在这样的ASMX解码。
[WebMethod]
public string IsRowChanged(int en_id , string ts)
{
byte[] timestamp = Encoding.ASCII.GetBytes(ts);
// rest of your function here
}
答案 2 :(得分:0)
不是将时间戳作为对象传递,而是将其转换为刻度,然后将其转换回日期时间对象。