Hola foro
aquí un problema que no le encontrado solución
ps tengo un servicio wcf rest en un iis7
esta es mi simple interfaz
Código C++:
Ver original[ServiceContract]
public interface ISAERegistro
{
#region "test"
[OperationContract]
[WebInvoke(
Method = "PUT",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
UriTemplate = "/testSendGetObject",
BodyStyle = WebMessageBodyStyle.WrappedRequest)]
TestEntity testSendObject(TestEntity sendGetObject);
[OperationContract]
[WebInvoke(
Method = "PUT",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
UriTemplate = "/testAloneSendObject",
BodyStyle = WebMessageBodyStyle.Wrapped)]
void testAloneSendObject(TestEntity sendObject);
[OperationContract]
[WebGet(
UriTemplate = "/testAloneGetObject",
ResponseFormat = System.ServiceModel.Web.WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.WrappedRequest
)]
TestEntity testAloneGetObject();
[OperationContract]
[WebInvoke(
Method = "PUT",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
UriTemplate = "/testSendGetString/{sendGetString}",
BodyStyle = WebMessageBodyStyle.WrappedRequest)]
string testSendGetString(string sendGetString);
[OperationContract]
[WebInvoke(
Method = "PUT",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
UriTemplate = "/testAloneSendString/{sendString}",
BodyStyle = WebMessageBodyStyle.Wrapped)]
void testSendString(string sendString);
[OperationContract]
[WebGet(
UriTemplate = "/testAloneGetString",
ResponseFormat = System.ServiceModel.Web.WebMessageFormat.Json
)]
string testGetString();
#endregion
}
la entidad
Código vb:
Ver originalnamespace LuzDelSur.Tecnico.SAE.Registro.WCFEntity
{
[DataContract( Name="TestEntity " , Namespace="") ]
public class TestEntity
{
[DataMember( Name="nombre", Order=1)]
public string nombre { get; set; }
[DataMember (Name="algo" , Order=2) ]
public string algo { get; set; }
}
}
y la implementacion del servicio
Código C++:
Ver originalpublic class SAERegistro : ISAERegistro
{
#region "test"
public TestEntity testSendObject(TestEntity sendGetObject) {
return sendGetObject;
}
public void testAloneSendObject(TestEntity sendObject) {
//:D
}
public TestEntity testAloneGetObject() {
TestEntity tes = new TestEntity();
tes.algo = "abcdefghijklmnñopqrstuvwxyz";
tes.nombre = "´qweeraáéíóúñÑ!#$$%$&%&/(&?=))=(()/(&/%(/&°¬°/*'";
return tes;
}
public string testSendGetString(string sendGetString) {
return sendGetString;
}
public void testSendString(string sendString) {
//:D
}
public string testGetString(){
return "´qweeraáéíóúñÑ!#$$%$&%&/(&?=))=(()/(&/%(/&°¬°/*'";
}
#endregion
}
y mi cliente en android
Código Javascript
:
Ver originalhttpClient = HttpClientFactory.getDefaultHttpClient();
T salida = null;
String aux = urlServidor + "/" + servicio.toString();
aux = aux.trim();
/**
* este esplit se hace para formatear la peticion a una URI valida este
* error se daba por ejeplo se daba una paametro con acentos o espacios
*/
// String[] parts = aux.split(":");
//
// if(port!=null){
// parts[1]+=":"+port+"/"+servicio.toString();
// }
//
// URI uri = new URI(parts[0], parts[1], null);
aux = (URI.create(aux)).toString();
StringEntity input = new StringEntity("{" + entityRequest.toString()
+ "}");
input.setContentType("application/json;charset=ISO-8859-1");// text/plain;charset=UTF-8
testingMonitor.writeLog("test", "URI parseada:" + aux);
testingMonitor.writeLog("test", "entity a ser enviada :: {"
+ entityRequest.toString() + "}");
switch (metodo) {
case RestClientConstants.Metodo.PUT:
testingMonitor.writeLog("test", ">PUT");
HttpPut putRequest = new HttpPut(aux);
// putRequest.setHeader("Accept", "text/json");
putRequest.setHeader("Content-type", "text/json; charset=ISO-8859-1");
if (!input.equals("{}")) {
//input.setContentType("text/json");
putRequest.setEntity(input);
testingMonitor.writeLog("test", "aniadio entity");
} else {
testingMonitor.writeLog("test", "no aniadio entity");
}
response = ejecutarMetodoSincrono(putRequest);
// br = new BufferedReader( new
// InputStreamReader((response.getEntity().getContent())));
// limpiar el entytiRequest al final de la petición
break;
}
br = new BufferedReader( new InputStreamReader((response.getEntity().getContent())));
entityRequest.delete(0, entityRequest.length());
servicio = new StringBuilder();
testingMonitor.writeLog("test", "estatus code:"
+ response.getStatusLine().getStatusCode());
if (response.getStatusLine().getStatusCode() != 200) {
String json=br.readLine();
throw new RuntimeException("Failed : HTTP error code : "
+ response.getStatusLine().getStatusCode());
}
if (c != null) {
String json=br.readLine();
// String json = br;
json = json.trim();
testingMonitor.writeLog("test", "json repuesta:" + json);
if (json.length() > 0) {
salida = (T) gs.fromJson(json, c);
}
testingMonitor.writeLog("test",
"salida clase parseada :" + salida.toString());
}
return salida;
}
basicamente , tiene mas codigo pero eso es lo que ejecuta para consumir el servicio , todo ok mientras no halla carcater como la enie o tildes ,
cuando envio y recibo string con simbolos raros no problemas
el problema es cuando el estring esta dentro de una clase como atributo , el esrvidor me reopnde con code estatus 400
.aniado l codigo que parsea el objeton
Código C++:
Ver original@Override
public void addObjetoRequest(String var, Object obj) {
entityRequest.append("\"");
entityRequest.append(var);
entityRequest.append("\":");
entityRequest.append(gs.toJson(obj));
}
alguien le ha pasado? ...qeu encoder reibe el servicio wcf , talves tenga que configurar su web config . nose ,.espero alguna luz sobre esto , gracias.