У меня запущен веб-сервис WCF и клиентское приложение Android. Я могу получить или получить данные из веб-службы в формате json, однако я не могу отправить или отправить какие-либо данные на сервер.
Ниже приведен код службы WCF:
[OperationContract]
[WebInvoke(Method = "POST",
UriTemplate = "/SetValue",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Wrapped)]
public string SetValue(TestClass someValue)
{
return someValue.Something.ToString();
}
[DataContract]
public class TestClass
{
[DataMember(Name = "something")]
public int Something
{
get;
set;
}
}
Ниже приведен код от клиента Android:
HttpClient httpClient = new DefaultHttpClient();
HttpPost request = new HttpPost("http://xxx.xxx.x.x:8000/SetValue");
List<NameValuePair> params = new ArrayList<NameValuePair>(1);
params.add(new BasicNameValuePair("something", "12345"));
request.setEntity(new UrlEncodedFormEntity(params));
HttpResponse response = httpClient.execute(request);
Ниже показано, как я запускаю автономный сервис:
class Program
{
static void Main()
{
Uri baseAddress = new Uri("http://localhost:8000/");
using (WebServiceHost host = new WebServiceHost(typeof(ServerSideProfileService), baseAddress))
{
host.AddServiceEndpoint(typeof(ServerSideProfileService), new BasicHttpBinding(), "Soap");
ServiceEndpoint endpoint = host.AddServiceEndpoint(typeof(ServerSideProfileService), new WebHttpBinding(), "Web");
endpoint.Behaviors.Add(new WebHttpBehavior());
// Open the service host, service is now listening
host.Open();
}
}
}
У меня есть только app.config, который просто имеет:
<?xml version="1.0"?>
<configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
Ответ, который я получаю, когда запускаю httpClient.execute (запрос) из клиента Android, включает:
HTTP/1.1 400 Bad Request
Request Error
The server encountered an error processing the request. See server logs for more details.
И это во многом. Я очень новичок в WCF и не знаю, где будет находиться этот «журнал сервера», и затрудняюсь решить, как это устранить или отладить? (Я пробовал Fiddler2, но он, похоже, ничего не обнаруживает в клиенте Android.)
[EDIT]
я тоже пробовал
JSONObject json = new JSONObject();
json.put("something", "12345");
StringEntity entity = new StringEntity(json.toString());
entity.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
entity.setContentType( new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
request.setEntity(entity);
, что также приводит к ошибке.
Я также заметил, что если я изменю 'SetValue', чтобы он возвращал константу, такую как "abcd", вместо someValue.Something.ToString (), то все работает?