gpt4 book ai didi

android - 如何通过 ksoap2-android 将复杂类型发送到 wcf 服务? - 如何配置wcf 服务?

转载 作者:搜寻专家 更新时间:2023-10-30 22:17:20 24 4
gpt4 key购买 nike

我尝试通过 ksoap2-android 将复杂类型发送到 wcf 服务。基本上我遵循了那个指南http://seesharpgears.blogspot.de/2010/10/ksoap-android-web-service-tutorial-with.html我能够从 Web 服务接收复杂的数据类型,但是当我尝试发送一个时,出现以下错误:

a:DeserializationFailed
The formatter threw an exception while trying to deserialize the message: There was an error while trying to deserialize parameter http://tempuri.org/:es.
The InnerException message was 'Error in line 1 position 373. Element 'http://tempuri.org/:es' contains data from a type that maps to the name 'http://tempuri.org/:EventSeries'.
The deserializer has no knowledge of any type that maps to this name.
Consider using a DataContractResolver or add the type corresponding to 'EventSeries' to the list of known types - for example, by using the KnownTypeAttribute attribute or by adding it to the list of known types passed to DataContractSerializer.'.
Please see InnerException for more details.

问题是我该如何解决这个问题?错误在信封中返回。当我按照教程中的描述进行所有操作并接收复杂类型的工作时,我认为错误是在服务器端产生的,但不幸的是我对 wcf 服务一无所知。我必须对 wcf 服务进行哪些更改才能使其正常工作?

我们试过类似的东西

[ServiceKnownType(typeof(EventSeries))]

如错误消息中所述,但没有帮助

Web 服务上的方法看起来像这样

public int InsertEventSeriesForAndroidVIntES(EventSeries es)
{
...
}

我附上了我的 android 代码,以防万一我搞砸了。

SoapObject request = new SoapObject("http://tempuri.org/, "InsertEventSeriesForAndroidVIntES");

EventSeries es = new EventSeries(10, "call Test");


PropertyInfo propertyInfo = new PropertyInfo();

propertyInfo.setName("es");
propertyInfo.setNamespace("http://tempuri.org");
propertyInfo.setValue(es);
propertyInfo.setType(EventSeries.class);

request.addProperty(propertyInfo);

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;

envelope.setOutputSoapObject(request);

envelope.addMapping(request.getNamespace(), "EventSeries", EventSeries.class);

HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport.call("http://tempuri.org/IDiversityService/InsertEventSeriesForAndroidVIntES", envelope);

SoapPrimitive result = (SoapPrimitive) envelope.getResponse();

最佳答案

我知道答案来得很晚,但希望其他人可以从中受益。我遵循了以下教程 http://seesharpgears.blogspot.com.es/2010/10/ksoap-android-web-service-tutorial-with.html发送复杂类型并收到类似的错误。问题是由默认 namespace 引起的,因为 ksoap 不知道如何映射对象。尝试通过在服务、服务接口(interface)和服务方法上传递的对象上设置它来定义您自己的命名空间:

  • 装饰服务:[ServiceBehavior(Namespace = http://yournamespace.org/)]
  • 装饰服务接口(interface):[ServiceContract(Namespace =http://yournamespace.org/)]
  • 用以下内容装饰您的对象:[DataContract(Namespace = http://yournamespace.org/)]

同时调整您的客户端代码,以通过将 tempuri.org 替换为您自己的命名空间来匹配新的命名空间:yournamespace.org。有关如何消除 tempuri 命名空间的更多详细信息,请阅读以下帖子:http://blogs.msdn.com/b/endpoint/archive/2011/05/12/how-to-eliminate-tempuri-org-from-your-service-wsdl.aspx

关于android - 如何通过 ksoap2-android 将复杂类型发送到 wcf 服务? - 如何配置wcf 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9841236/

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