2011-10-18 2 views
4

JSON 객체를 통해 웹 서비스에 (Asp.Net 2.0 ASMX)을 객체 :패스 바이트 배열 내가 코드를

세션 [ "타임 스탬프"]은 LINQ를 사용하여 오는 바이트 배열을 가지고

법인

에 지금은 그게 웹 서비스 같은 서명이있는 오류

에게 발생이 함수를 호출 할 때 : 내가 바이트 [] 사방 문자열로 작동 교체 할 경우

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

합니다.

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

도움을 주시면 감사하겠습니다.

+1

오류 메시지가 무엇입니까? –

+0

경고 메시지 상자에 "오류"가 표시됩니다. 세부 메시지가 표시되지 않습니다. 바이트 배열이 string.So로 문제가 될 수도 있습니다 말을 전달 여부를 모르겠다. – Moons

+2

왜 디버거를 넣고 함수가 호출되는지 여부를 확인하지 않습니까? 호출에 대한 응답을보기 위해 방화범을 확인 했습니까? – naveen

답변

5

바이너리 데이터를 Base 인코딩하여 서버 측의 바이트 []로 다시 변환해야합니다.

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

+1 : 우리의 제안은 다소 다르다. – naveen

+0

바이트 객체를 바이너리 데이터로 변환하여 세션 객체에 넣을 수있는 코드를 게시 할 수 있습니까? 다시 되돌립니다. 내 웹 메서드의 서명도되어야합니까 – Moons

+0

약 30 분 후에이 작업을 수행 할 수 있습니다. 나는 일하러가는 중입니다 ... – sra

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 
} 
+0

+1에 대한 코드 예제 – sra

+0

@naveen byte []는 SQL Server 2008의 타임 스탬프입니다. 언제 linq 사용하여 엔터티 바이트 배열에서 가져옵니다. 먼저 바이트 []를 문자열로 변환하여 세션 객체에 넣고 나중에 문자열에서 바이트 []로 변환해야합니다.하지만 원래의 바이트 배열과 문자열로 변환 된 바이트 araay를 비교하고 나중에 바이트 []로 cnverted했을 때 나는 다른 결과를 얻었습니다. byte []를 문자열로 변환하는 코드도 게시 할 수 있습니까? 또한 인코딩에 대한 지식이 없습니다 – Moons

+0

을 사용하고 있습니다 bytearray를 문자열로 변환하는 코드를 표시 할 수 있습니까? – naveen

0

.