2013-10-11 2 views
0

따라와 내 OperationContract를xml은 wcf rest service 응답에서 변경됩니다. 왜?

[OperationContract] 
[WebGet(ResponseFormat = WebMessageFormat.Xml, 
     BodyStyle = WebMessageBodyStyle.Wrapped, 
     UriTemplate = "/send?canvasbyte={imgbyte}")] 
string sendresponse(string imgbyte); 

이며, 다음은 내 OperationContract를 구현하고 난 내가 함께이 서비스를 테스트하고있어

public string sendresponse(string imgbyte) 
{ 
      return imgbyte; 
} 

여기에 같은 인수 (문자열)을 반환하고있어 Java 스크립트에서 HTML5 클라이언트 응용 프로그램을 가져옵니다. xmlHttpRequest를 get 메서드로 보내고 있습니다. URL을 전달하는 값은 Canvas Drawing의 DataUrl입니다.

var canvas = document.getElementById('canvasid'); 
console.log(canvas.toDataURL()); 
var url = "http://myserverurl.com/ServiceImpl.svc/send?canvasbyte=" +   canvas.toDataURL().toString(); 
var xmlHttp = new XMLHttpRequest(); 
xmlHttp.onload = function() { 

    var xmldocument = xmlHttp.responseText; 
    console.log(xmlHttp.responseText); 

}; 
xmlHttp.open("GET", url, true); 
xmlHttp.send(); 

이것은 캔버스 dataurl 큰 텍스트 값 내 클라이언트 코드입니다. 서비스가 수신하고 동일한 것을 반환 함 하지만 여기에 결과가 약간 변경됩니다. 왜?? 결과에서 일부 "+"기호가 누락 된 것 같습니다.

+0

??? imgByte가 정확히 들어가는 방법과 반환되는 대상에 대한 어떤 종류의 표시를 제공해주십시오. – Nico

+0

실제로 나는 긴 문자열을 보내고 있습니다. 문자열에있는 모든 + 기호가 공백으로 교체됩니다. 그게 문제입니다 .. –

답변

1

플러스 기호는 브라우저에서 공백으로 해석됩니다.

GET 방법을 사용하고 있으므로 요청 데이터가 쿼리 문자열에 저장됩니다 (가능한 경우 POST를 사용하는 것이 더 좋습니다).

데이터가 쿼리 문자열에 있으므로 서버는 자동으로 공간을 공간으로 변경합니다.

다음은 더 도움이되는 스레드입니다.

Plus sign in query string

0

는 그 코드와 너무 많은 문제가 있습니다.

첫 번째 기본 IIS 구성에서는 2000 자보다 긴 URL을 허용하지 않습니다. 두 번째로 전달하려면 이스케이프 된 값이 필요하므로 name=Files/John Doe은 + 기호 이상인 name=Files%2FJohn+Doe이됩니다.

시도 방법에 데이터를 게시하십시오.