使接口结构出现在WSDL中

时间:2009-11-05 17:56:59

标签: c# web-services wsdl wcf

我已经在Web服务上公开了一个方法来返回一个接口并使用[ServiceKnownType]属性发送回相关类,该属性非常有用。

但是,wsdl描述不显示它的任何属性或此接口的任何xml结构,这与我发送回List时相同,它给它一个默认类型'ArrayOfAny'。我想要做的是将WSDL中的'ArrayOfAny'XML结构替换为已知servicetype的结构。

我知道有一个接口'IWsdlExportExtension'可以实现来访问wsdl创建并完成此操作我不知道下一步该做什么?

为了使WSDL'输出消息'xml节点具有我实际发回的conrete类的xml结构,我必须执行什么过程?

基本上,我只是想用一些自定义内容修改wsdl input_message xml节点?

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

你不能这样做。面向服务的世界及其WCF是基于XML模式构建的,您只能通过网络发送具体类型。记住 - 客户端和服务器之间的所有内容都是序列化的消息 - 没有引用或任何东西的传递 - 只有具体的类可以序列化为消息。

你能做什么(在某种程度上)是定义一个基类,然后使用[KnownType]属性声明其他后代也可能被给定的操作接收和/或返回。

如果您控制通信通道的两端(即.NET-to-.NET WCF),您唯一的希望就是NetDataContractSerializer,您可以使用它。

查看以下文章:

NetDataContractSerializer将.NET类型信息打包到您的序列化消息中,从而实现常规,可互操作的服务实现无法处理的一些糟糕的场景。

更新 - 好吧,我可能没有完全明白你的问题 - 这篇文章A Sample IWsdlExportExtension for WCF可能会帮助你吗?