WCF服务引用中的接口参数/返回类型
本文关键字:参数 返回类型 接口 服务 引用 WCF | 更新日期: 2023-09-27 18:03:53
我有一个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);
}
我看过很多关于这个问题的答案,但似乎没有一个能解决我的问题,所以任何见解都是有用的。
提前感谢您提供的帮助。
我想添加评论而不是回答,但我的声誉不够,所以就这样了。
不能通过服务操作返回接口,也不能将接口作为参数传递给该操作。服务和客户端需要完全解耦,不能使用共享接口。请记住,WCF客户端并不总是。net应用程序。
如果IWorkerResponse只有属性(没有方法),那么根本不需要使用接口。
否则使用IWorkResponse的方法作为操作契约
[ServiceContract] public interface IWorkResponseService { [OperationContract] SomeResponseObject DoWork(SomeRequestObject request); }
还是有可能按照Maarten在评论中建议的去做的。
也可以看到这个问题的答案,我如何从WCF合约返回对接口的引用?