5

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

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

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

应该注意的是,我能够手动弄清楚我需要做什么,并让它以原始形式与 Fiddler(请求生成器)一起工作,因此我可以在代码中序列化我的对象并通过 http post 手动发送数据。 ..这就是我在非.Net客户中的做法。这更像是一个更好地理解 WCF 方面的问题,以及为什么我在客户端缺少如此多的属性,而客户端几乎没有文档来解决这些问题。

4

2 回答 2

3

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

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

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

于 2010-01-09T01:08:01.760 回答
1

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

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

于 2010-01-09T01:33:11.783 回答