从android应用程序传递对象到WCF服务方法

时间:2011-11-17 13:56:33

标签: android .net wcf

我知道我们可以从android应用程序中使用WCF服务,并通过传递Requested URL中的值将值传递给WCF服务方法。但我调用的服务方法采用Object作为参数,我没有得到如何将此对象传递给服务方法?我使用的服务也是第三方,我不能对其进行任何修改。

或者有没有办法在Android应用程序中添加服务引用?

任何帮助?

由于

2 个答案:

答案 0 :(得分:0)

服务 - 在WCF和所有其他技术堆栈上 - 通过发送消息而非对象进行通信。这是互操作性的基础,因此对我们来说非常重要。 WCF将CLR语言结构(如C#中的语言结构)转换为消息世界,然后再返回。所以我们有一种错觉,认为我们使用.NET对象进行编程,但实际上WCF正在代表我们进行基于消息的通信。

对于SOAP服务,消息以XML表示,消息模式(消息的合同)以XSD表示。当您编写使用System.Object作为参数的服务协定时,如下所示:

[ServiceContract]
public interface IService1
{
  [OperationContract]
  string GetData( object something );
}

然后GetData请求消息的消息模式如下所示:

<xs:element name="GetData">
  <xs:complexType>
    <xs:sequence>
      <xs:element minOccurs="0" name="something" nillable="true" type="xs:anyType"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

这里的关键是“something”元素的类型是“xs:anyType”。换句话说,这里允许绝对任何XML 。这是基于XML的消息传递领域最松散的合同。事实上,如此宽松,这项服务的大多数客户都不知道如何处理消息的内容,因为它可能是任何东西。这就是你在CLR世界中所说的,System.Object是所有引用类型的基类,所以它可以是任何东西。

在Android(或任何其他技术堆栈)世界中,试图使用这项服务,它可能会举手示意,“服务合同说这可能是什么,但我没有可接受的'这可能是任何类型,所以这不会起作用。“ (你没有描述你在Andriod方面遇到的问题的性质。这将是有启发性的。)

如果这个“如此松散而无意义”合同是由第三方撰写的,那么让我提出三个选择。

首先,获取不同的第三方服务或进行此更改。问题是他们已经编写了一个糟糕的合同服务,并且使用该合同作为互操作的基础(例如,WCF和Android)将成为问题或彻底失败。这个主题是服务合同101,它不是非常奇特。

其次,如果第三方服务支持JSON(除XML之外)消息,则可以简化松散合同的使用。

第三,创建一个包含第三方服务使用的服务。这个新服务将传递更有意义的类型(字符串,整数,具有[DataContract]属性的类)并封装有意义类型和System.Object之间的转换。然后,Android客户端可以使用具有有意义合同的新服务。

希望有所帮助!

答案 1 :(得分:0)

请查看ksoap for android。如果您尝试使用库和相关的示例集,那么调用WCF服务非常容易。你可以添加方法参数,请求标题等几乎任何你想要的东西。