Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从android应用程序向WCF服务方法传递对象_Android_.net_Wcf - Fatal编程技术网

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

从android应用程序向WCF服务方法传递对象,android,.net,wcf,Android,.net,Wcf,我知道我们可以从android应用程序中使用WCF服务,并通过在请求的URL中传递值来将值传递给WCF服务方法。但是我调用的服务方法将对象作为参数,我不知道如何将此对象传递给服务方法?另外,我使用的服务是第三方的,我不能对其进行任何修改 或者有没有办法在android应用程序中添加服务引用 有什么帮助吗 感谢WCF和其他技术栈上的服务通过发送消息而不是对象进行通信。这是互操作性的基础,因此对我们来说非常重要。WCF在CLR语言构造之间进行转换,就像C#中的那些构造一样,转换成消息世界,然后再转换

我知道我们可以从android应用程序中使用WCF服务,并通过在请求的URL中传递值来将值传递给WCF服务方法。但是我调用的服务方法将对象作为参数,我不知道如何将此对象传递给服务方法?另外,我使用的服务是第三方的,我不能对其进行任何修改

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

有什么帮助吗

感谢

WCF和其他技术栈上的服务通过发送消息而不是对象进行通信。这是互操作性的基础,因此对我们来说非常重要。WCF在CLR语言构造之间进行转换,就像C#中的那些构造一样,转换成消息世界,然后再转换回来。所以我们有一种错觉,以为我们是在用.NET对象编程,但实际上WCF是在代表我们进行基于消息的通信

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

[ServiceContract]
public interface IService1
{
  [OperationContract]
  string GetData( object something );
}
<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>
然后GetData请求消息的消息架构如下所示:

[ServiceContract]
public interface IService1
{
  [OperationContract]
  string GetData( object something );
}
<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(或任何其他技术栈)的世界里,试图使用这项服务,它可能会举手说,“服务合同说这可以是任何东西,但我没有一个可接受的‘这可以是任何东西’类型,所以这不起作用。”(你没有从安德里奥德的角度描述问题的本质,这会很有启发性。)

如果这个“如此松散以至于毫无意义”的合同是由第三方编写的,那么让我建议三种选择

首先,获取不同的第三方服务或对此进行更改。问题是,他们编写的服务具有糟糕的契约,并且使用该契约作为互操作的基础(例如,WCF和Android)将出现问题或彻底失败。本主题是服务契约101,它不是非常奇怪

其次,如果第三方服务支持JSON(除XML外)消息,则可以简化松散契约的处理

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


希望有帮助!

请看。如果您尝试使用该库和相关示例集,调用WCF服务非常容易。您可以添加方法参数、请求标题等几乎任何您想要的内容。

该服务支持吗?--PS看一看是的,它使用BasicHttpBinding。您的应用程序如何获得该服务的代理?如果没有该服务公开一个元数据端点并定义一个可互操作的数据协定,然后您应该能够使用它并基于该协定创建对象。