将会话对象中的字节数组传递给Web服务(Asp. js).Net 2.0 asmx)通过一个JSON对象

本文关键字:对象 asmx Net 会话 JSON 一个 js Asp 数组 字节数 字节 | 更新日期: 2023-09-27 18:11:45

我有一个代码:

会话["timestamp"]有一个字节数组在它使用LInq到实体

现在当我调用这个函数时,它会抛出一个错误

web服务的签名如下:

[WebMethod]
public  string IsRowChanged(int en_id , byte[] timestamp)
{
}

如果我将byte[]替换为string,它就会正常工作。

$.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);
    }
});

将会话对象中的字节数组传递给Web服务(Asp. js).Net 2.0 asmx)通过一个JSON对象

您应该对二进制数据进行Base编码,并在服务器端将其转换回byte[]。

// returns a byte[]
System.Convert.FromBase64String(base64String);
// returns a string
System.Convert.ToBase64String(byteData);

试试这个。将其作为字符串传递,并将其转换为

函数中的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
}