gpt4 book ai didi

android - 使用对象作为参数从 Java 调用 RESTful WCF 服务方法

转载 作者:行者123 更新时间:2023-11-29 22:05:29 28 4
gpt4 key购买 nike

我有一个 RESTful WCF 服务,它的方法之一使用对象作为参数

[WebInvoke(UriTemplate = "save", Method = "POST", RequestFormat = WebMessageFormat.Xml, ResponseFormat= WebMessageFormat.Xml), OperationContract]
public SampleItem Create(SampleItem instance)
{
return new SampleItem() { Id = 1, StringValue = "saved" };
// TODO: Add the new instance of SampleItem to the collection
//throw new NotImplementedException();
}

我正在尝试从我的 eclipse android 项目中调用此方法。我正在使用这些代码行

DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost post=new HttpPost("http://10.0.2.2:2768/Service1.svc/save");
ArrayList<NameValuePair> nvp= new ArrayList<NameValuePair>();

nvp.add(new BasicNameValuePair("Id", "1"));
nvp.add(new BasicNameValuePair("StringValue", "yolo"));

post.setEntity(new UrlEncodedFormEntity(nvp));
HttpResponse httpResponse = httpClient.execute(post);
HttpEntity httpEntity = httpResponse.getEntity();
String xml = EntityUtils.toString(httpEntity);

每次我收到这个错误Method not allowed.在服务方法返回的 XML 中。

我试过从浏览器调用它,但在那里遇到了同样的错误。

请告诉我我做错了什么以及我可以做什么。

提前感谢任何可以提供帮助的人。

注意:其他不使用对象作为参数的方法都可以正常工作。

编辑:成功尝试了 Fiddler2。但又停滞了。

我试过调用方法 SampleItem Create(SampleItem instance)使用网址 http://localhost:2768/Service1.svc/save它有效。该方法以 XML 格式返回对象。

在 fiddler 中,我将请求正文添加为 <SampleItem xmlns="http://schemas.datacontract.org/2004/07/WcfRestService1" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><Id>1</Id><StringValue>saved</StringValue></SampleItem>

但问题是我找不到任何方法将此 xml 字符串添加到 HttpPostHttpRequest 作为 requestbody eclipse android项目。

注意:将 xml 字符串作为 HeaderUrlEncodedFormEntity 传递无效。

最佳答案

最后我成功地将一个 json 对象发送到我的 WCF 服务 这是我的代码

URI uri = new URI("http://esimsol.com/droidservice/pigeonlibrary.service1.svc/save");

JSONObject jo1 = new JSONObject();
jo1.put("Id", "4");
jo1.put("StringValue", "yollo");

HttpURLConnection conn = (HttpURLConnection) uri.toURL().openConnection();
conn.setRequestProperty("Content-Type","application/json; charset=utf-8");
conn.setRequestProperty("Accept", "application/json");
conn.setRequestProperty("User-Agent", "Pigeon");
conn.setChunkedStreamingMode(0);
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.connect();

DataOutputStream out = new DataOutputStream(conn.getOutputStream());
out.write(jo1.toString().getBytes());
out.flush();

int code = conn.getResponseCode();
String message = conn.getResponseMessage();

InputStream in = conn.getInputStream();
StringBuffer sb = new StringBuffer();
String reply;

try {
int chr;
while ((chr = in.read()) != -1) {
sb.append((char) chr);
}
reply = sb.toString();
} finally {
in.close();
}

SampleItem SI = new SampleItem();
SI=new Gson().fromJson(reply, SampleItem.class);

Toast.makeText(getApplicationContext(), SI.getStringValue(),Toast.LENGTH_LONG).show();

conn.disconnect();

感谢 StackOverFlow。我不得不结合一些代码 fragment 来实现这一目标。

关于android - 使用对象作为参数从 Java 调用 RESTful WCF 服务方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10862038/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com