我有一个wcf方法接受一个对象“Order”作为其输入并返回一个对象“ResultSet”。我创建了一个测试项目,添加了对objectModel项目的引用,并且可以使用我的服务没问题。
我将DataContract和DataMember属性添加到我的Order对象属性中(我的Order类是在一个单独的项目中而不是wcf服务,不确定它是否起作用?)。我迷雾的是,如果使用此服务的客户端在java应用程序中执行此操作会是什么?他如何将订单类型的对象传递给我的服务?他怎么去接收ResultSet类型的对象?
这种情况是否会按原样运作?是否在服务引用中自动填充了有关该对象的信息?即使它是如何说一个Java应用程序甚至传递我的类型为Order的对象?
答案 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代码能够构造正确的消息,它就可以正常工作。