WCF服务引用中的接口参数/返回类型

本文关键字:参数 返回类型 接口 服务 引用 WCF | 更新日期: 2023-09-27 18:03:53

我有一个WCF服务和一个MVC客户端,其中有对上述内容的服务引用。我正在尝试使用标记接口作为返回类型和参数,但我在生成服务引用以反映这一点时遇到了麻烦。

我目前在我的服务引用中获得返回类型/参数类型为"对象",所以我的问题是我如何解决这个问题,因为我的服务中的实际函数分别接受和返回IWorkRequestIWorkResponse的接口。

我的服务契约如下所示:

[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服务引用中的接口参数/返回类型

我想添加评论而不是回答,但我的声誉不够,所以就这样了。

不能通过服务操作返回接口,也不能将接口作为参数传递给该操作。服务和客户端需要完全解耦,不能使用共享接口。请记住,WCF客户端并不总是。net应用程序。

如果IWorkerResponse只有属性(没有方法),那么根本不需要使用接口。

否则使用IWorkResponse的方法作为操作契约

[ServiceContract]
public interface IWorkResponseService
{
    [OperationContract]
    SomeResponseObject DoWork(SomeRequestObject request);
}

还是有可能按照Maarten在评论中建议的去做的。

也可以看到这个问题的答案,我如何从WCF合约返回对接口的引用?