使用自定义对象作为输入参数的WCF服务

时间:2012-02-22 19:20:23

标签: wcf web-services

我有一个wcf方法接受一个对象“Order”作为其输入并返回一个对象“ResultSet”。我创建了一个测试项目,添加了对objectModel项目的引用,并且可以使用我的服务没问题。

我将DataContract和DataMember属性添加到我的Order对象属性中(我的Order类是在一个单独的项目中而不是wcf服务,不确定它是否起作用?)。我迷雾的是,如果使用此服务的客户端在java应用程序中执行此操作会是什么?他如何将订单类型的对象传递给我的服务?他怎么去接收ResultSet类型的对象?

这种情况是否会按原样运作?是否在服务引用中自动填充了有关该对象的信息?即使它是如何说一个Java应用程序甚至传递我的类型为Order的对象?

1 个答案:

答案 0 :(得分:0)

Java应用程序不必传递相同类型的对象,它必须传递满足服务接口所规定的合同的消息。

考虑仅限.NET的服务。假设您有此服务/数据合同:

namespace MyServer
{
   [ServiceContract(Namespace="http://example.com/foo")]
   public interface IMyService 
   {
        void Foo(Bar bar);
   }

   [DataContract(Namespace="http://example.com/foo")]
   public class Bar
   {
       [DataMember]
       public string Result { get; set; }
   }
 }

现在,假设您想要对客户端进行代码编写,您可以创建自己的数据协定实现(请注意,它位于不同的命名空间中,可能与上面的代码不同):

namespace MyClient
{
   [DataContract(Namespace="http://example.com/foo")]
   public class Bar
   {
       [DataMember]
       public string Result { get; set; }
   }
 }

它是一个不同的类型,但它仍然会通过WCF正确序列化/反序列化,因为消息构造正确。相同的原理适用于Java客户端。只要你的java代码能够构造正确的消息,它就可以正常工作。