我有一个WCF服务和一个MVC客户端,它具有对前述的服务引用。我正在尝试使用标记接口作为返回类型和参数,但我无法生成服务引用以反映这一点。
我目前正在获得"对象"的返回类型/参数类型。在我的服务参考中,所以我的问题是如何解决这个问题,因为我的服务中的实际功能需要分别返回IWorkRequest
和IWorkResponse
的接口。
我的服务合同如下:
[ServiceContract]
public interface IMyService
{
[OperationContract]
IWorkResponse DoWork(IWorkRequest request);
}
我的服务端接口如下所示:
[ServiceKnownType(typeof(WorkRequestA))]
[ServiceKnownType(typeof(WorkRequestB))]
[ServiceContract()]
public interface IWorkRequest
{
}
我有一个类似的IWorkResponse遵循相同的模式。当我构建项目并更新服务引用时,服务引用如下所示:
public object DoWork(object request) {
return base.Channel.DoWork(request);
}
我也没有参考通过服务引用实现可用客户端接口的接口或任何类。
理想情况下,我希望服务引用如下:
public IWorkResponse DoWork(IWorkRequest request) {
return base.Channel.DoWork(request);
}
我已经看过很多关于这方面的答案,但似乎没有解决我的问题所以任何见解都会有用。
提前感谢您提供的任何帮助。
答案 0 :(得分:3)
我想添加评论而不是答案,但我没有足够的声誉,所以这里就是。
您无法通过服务操作返回接口,也不能将接口作为参数传递给操作。服务和客户端需要完全解耦,而不是使用共享接口。请记住,WCF客户端并不总是.Net应用程序。
如果IWorkerResponse只有属性(没有方法),则根本不需要使用接口。
否则使用IWorkResponse的方法作为操作合同
[ServiceContract] public interface IWorkResponseService { [OperationContract] SomeResponseObject DoWork(SomeRequestObject request); }
Maarten在评论中可能仍然可以做到这一点。
另请参阅此How do I return a reference to an interface from a WCF contract?
的答案