WCF服务参考

时间:2016-08-25 14:15:52

标签: c# .net wcf

我有一个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);
}

我已经看过很多关于这方面的答案,但似乎没有解决我的问题所以任何见解都会有用。

提前感谢您提供的任何帮助。

1 个答案:

答案 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?

的答案