WCF客户端(添加服务引用)讨厌WebGet和WebInvoke ......真的,它确实如此

时间:2009-10-23 13:29:46

标签: .net xml wcf json platform-agnostic

我一直致力于创建独立于.Net客户端运行的WCF服务。感谢Google和StackOverflow,我已经能够创建简单的xml和json服务,而不需要Soap包装器和一些我不需要的花哨的WCF。这是一个痛苦的经历,因此这个问题的主题。在自动添加服务引用时使用WebGet和WebInvoke时,WCF在客户端是疯狂的。

为了检查通信,我一直在本地创建一个WCF客户端并通过Fiddler传递所有内容。这样,无论是否有效,我至少可以看到客户端尝试发送的内容。当它最终运行时,我可以看到从两端发送的数据,然后在非.Net客户端中复制此通信。

我当前的问题是,当我将服务更改为期望POST数据为json(enableWebScript行为)时,客户端不知道,它仍然尝试将对象作为xml发送。我在使用添加服务引用时没有自动设置客户端的配置有很多问题,所以我希望它可以添加到客户端的app.config上。使用XML时,我在服务中创建和使用的对象由客户端自动进行xml序列化(这是最方便的)。甚至可以在当前版本的WCF中以json的形式进行操作吗?

应该注意的是,我能够弄清楚我需要手动操作并使用Fiddler(请求构建器)以原始形式工作,因此我可以在代码中序列化我的对象并通过手动发送数据http post ...无论如何,这就是我在非.Net客户端中的表现。这更像是一个更好地理解WCF方面的问题,以及为什么我在客户端缺少那么多可用于解决问题的文档的属性。

2 个答案:

答案 0 :(得分:3)

WCF服务引用是针对自我描述的RPC有效负载 - 即SOAP,wsHttp等。同样,WCF强类型客户端仅用于处理RPC有效负载,因为只有它们能够广播所需的所有类型信息等为了它正常工作。

当您使用webget和webinvoke时,您正在创建非rpc服务(旨在编写REST服务),这些服务也不是自描述的,因此它不适合服务引用功能。

你当然可以为此编写一个.Net客户端 - 但你会发现使用WebClient / WebRequest编写它,手动格式化/读取XML / Json请求/响应(或使用DataContractSerializer和DataContractJsonSerializer来更容易)帮帮忙。)

答案 1 :(得分:1)

SOAP是自描述的(通过WSDL)。

WebGet / WebInvoke不会公开任何会告诉客户端使用JSON而不是XML的元数据。