使用KSOAP2从Android发送数据到WCF
本文关键字:数据 WCF KSOAP2 Android 使用 | 更新日期: 2023-09-27 18:18:31
我的代码是,
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("ItemList", mainObject.toString());
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.setOutputSoapObject(request);
envelope.dotNet = true;
envelope.implicitTypes = true;
HttpTransportSE transport = new HttpTransportSE(URL);
try {
transport.call(SOAP_ACTION, envelope);
} catch (final Exception e) {
activity.runOnUiThread(new Runnable() {
public void run() {
new CustomToast(activity, SOAP_ACTION + " - "
+ e.getMessage() + " error").show();
e.printStackTrace();
}
});
}
try {
fault = (SoapFault) envelope.bodyIn;
activity.runOnUiThread(new Runnable() {
public void run() {
if (fault != null) {
new CustomToast(activity, fault.getMessage())
.show();
}
}
});
} catch (Exception e) {
e.printStackTrace();
}
try {
result = (SoapObject) envelope.bodyIn;
} catch (Exception e) {
e.printStackTrace();
}
而mainObject是JSONObject
,它包含以下数据,
{"ItemList":[{"ID":"","Name":"Abc","Mark":"81"},{"ID":"","Name":"XYZ","Mark":"82"}]}
我以以下方式在我的WCF中收到此消息。
[OperationContract]
void InsertUpdateEntry(Items ItemList);
和Items
类
[CollectionDataContract(Namespace = "")]
public class Items : List<clsitems>
{
}
和clsitems
类
[DataContract]
public class clsitems
{
[DataMember]
public string ID { get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public string Mark { get; set; }
}
最后我面临以下例外。
java.io.IOException: HTTP request failed, HTTP status: 500
我只想将数据发送到Items
类,因此任何其他解决方案也是可以接受的。
尝试在CollectionDataContract属性上设置ItemName。例如:
[CollectionDataContract(Name = "Custom{0}List", ItemName = "CustomItem")]
public class Items : List<clsitems>
{
}
CollectionDataContractAttribute的目的是在处理来自非提供者的数据时简化互操作性,并控制序列化实例的确切形状。为此,ItemName属性使您能够控制集合中重复项的名称。当提供程序不使用XML元素类型名称作为数组项名称时,这尤其有用,例如,如果提供程序使用"String"作为元素类型名称而不是XSD类型名称"String"。
从这里取
找到你问题的解决办法了。HTTP 500是一个内部服务器错误,因此您应该检查服务器是否与SOAPUI或其他工具一起工作。然后确保您可以从设备到达URL(在这种情况下的IP号码),然后开始调试ksaop调用。确保你的web服务工作正常与否
您可以像这样在服务器端启用跟踪,并检查结果文件,包括记录的SOAP消息。然后你就可以找出问题所在了。将其添加到app.config或web.config中。(你可能需要更改一些设置)
<system.diagnostics>
<sources>
<source propagateActivity="true" name="System.ServiceModel" switchValue="All">
<listeners>
<add type="System.Diagnostics.DefaultTraceListener" name="Default">
<filter type="" />
</add>
<add name="xml">
<filter type="" />
</add>
</listeners>
</source>
<source name="System.ServiceModel.MessageLogging">
<listeners>
<add type="System.Diagnostics.DefaultTraceListener" name="Default">
<filter type="" />
</add>
<add name="xml" />
</listeners>
</source>
<source name="CardSpace">
<listeners>
<add type="System.Diagnostics.DefaultTraceListener" name="Default">
<filter type="" />
</add>
<add name="xml">
<filter type="" />
</add>
</listeners>
</source>
<source name="System.IO.Log">
<listeners>
<add type="System.Diagnostics.DefaultTraceListener" name="Default">
<filter type="" />
</add>
<add name="xml">
<filter type="" />
</add>
</listeners>
</source>
<source name="System.Runtime.Serialization">
<listeners>
<add type="System.Diagnostics.DefaultTraceListener" name="Default">
<filter type="" />
</add>
<add name="xml">
<filter type="" />
</add>
</listeners>
</source>
<source name="System.IdentityModel">
<listeners>
<add type="System.Diagnostics.DefaultTraceListener" name="Default">
<filter type="" />
</add>
<add name="xml">
<filter type="" />
</add>
</listeners>
</source>
</sources>
<sharedListeners>
<add initializeData="Traces.svclog" type="System.Diagnostics.XmlWriterTraceListener"
name="xml" traceOutputOptions="ProcessId, ThreadId">
<filter type="" />
</add>
</sharedListeners>
</system.diagnostics>