【发布时间】:2013-09-12 07:07:14
【问题描述】:
我有一个 WCF 客户端-服务器设置。在服务器端,我在我的服务方法中使用接口作为返回类型,然后将我的合同/服务与<ServiceKnownTypeAttribute> 关联起来。这一切都很好。
但是,有一个问题非常烦人。当我向我的客户端添加服务引用时,生成的存根方法都具有object 的返回类型。因此,我的客户端上不再存在 Intellisense。我完全能够使用返回值并可以访问属性,但我必须进行强制转换才能“恢复”智能感知。
例子:
服务器方法:
<OperationContract()>
<ServiceKnownTypeAttribute(GetType(Something))>
Function GetSomething() As ISomething Implements Iservice.GetSomething
生成的存根:
Function GetSomething() As Object Implements Iservice.GetSomething
客户端代码(必须在此处强制转换,因为存根返回类型是对象):
Dim s As ISomething= CType(client.GetSomething(), ISomething)
我是否遗漏了什么或者这只是正常的行为。由于对象可以序列化并且一切正常,我无法理解为什么我的存根不是特定类型的。
谢谢
乔纳斯
【问题讨论】:
-
如何序列化接口?客户端将使用接口做什么(即,它将如何实现它?)接口是一个 OO 概念 - WCF(和 Web 服务)是关于 SOA 的,不了解 OOP。谷歌“从 WCF 返回接口”,你会看到很多关于这个的答案以及为什么它不能完成(或者至少,不是很容易)。
-
我认为你没有理解我的意思。让我试着更清楚一点。
-
我认为你没有理解我的意思。让我试着更清楚一点。我不想返回一个接口。但是,我在服务器端使用接口,然后将具体类型告诉序列化程序。我使用我的方法/服务上的属性来做到这一点。这样,序列化程序就知道如何将接口返回类型序列化为具体实现。同样,我帖子中的所有代码都可以正常工作。这样我就可以继续在客户端上使用接口。我希望这足以让您看到这不是序列化问题。
-
我还是不明白你。 “在服务器端我使用接口作为返回类型” - 这怎么不返回接口?
ISomething是接口吗?如果是,那么Function GetSomething() As ISomething正在返回一个接口。我没有不同意你的观点——我只是没有看到你似乎想告诉我什么。
标签: .net wcf serialization