我有一个简单的wcf服务契约,如果我使用接口的具体实现,但是如果我想在参数中使用接口而不是具体的类,它会给出我将在下面显示的错误。为什么我的操作不能在我的wcf客户端中使用接口作为参数?
这里是代码:
[ServiceContract]
public interface IClientUserRegistration
{
[OperationContract]
void RegisterClientUser(ClientUser clientUser);
[OperationContract]
List<ClientUser> GetUsers();
}
如果我IClientUser取代ClientUser,WCF测试客户端说,不支持RegisterClientUser 操作,因为它使用System.Object类型。如果我用List替换GetUsers的返回值,它说这个操作不被支持,因为它使用了System.Object []类型。为什么会出现这些错误?
我试图使用IClientUser的原因是我可以实现实现IClientUser接口并将它们传递到RegisterClient的不同用户类型,但是如果我只能通过ClientUser,那么我必须创建一堆RegisterClient覆盖了不同类型的用户。
如果它是基于REST的服务,我可以使用接口还是相同。我是新来的,所以原谅我。关于我的问题的另一部分,因为你提到SOAP没有接口的概念。如果我想注册不同的客户端,我是否必须重写RegisterClientUser方法,例如,RegisterClientUser(SuperUser superUser); – Xaisoft 2010-09-15 18:20:03
是的,无论如何都是一样的。想象一下,试图制作一个对象内所有值的XML表示,但你只知道一小部分键。你将无法完成你的任务。 WCF以同样的方式看待它。 – 2010-09-15 18:25:28
Spot on on - WCF调用是** NOT ** .NET函数调用 - 它们是从客户端传递到服务器(并返回)的序列化消息,并且接口不适用于序列化.... – 2010-09-15 18:26:20