C# 如何在客户端和REST服务之间共享对象模式

C# 如何在客户端和REST服务之间共享对象模式,c#,.net,wcf,rest,C#,.net,Wcf,Rest,正如我们所知,我们不必在客户端获取服务引用或不需要代理就可以与REST服务进行通信。但问题是,既然客户机没有对象模式,那么客户机怎么会知道要向服务发送什么对象呢?如果它必须发送序列化对象XML/JSON,那么对象模式应该是什么呢?根据问题中的标记,假设您正在使用WCF,您可以放置服务和数据契约(而不是服务实现)在客户端应用程序和服务所依赖的共享程序集中 如果您的客户机正在进行非SOAP调用(对“webHttpBinding”端点),则可以使用DataContractSerializer手动序列化

正如我们所知,我们不必在客户端获取服务引用或不需要代理就可以与REST服务进行通信。但问题是,既然客户机没有对象模式,那么客户机怎么会知道要向服务发送什么对象呢?如果它必须发送序列化对象XML/JSON,那么对象模式应该是什么呢?

根据问题中的标记,假设您正在使用WCF,您可以放置服务和数据契约(而不是服务实现)在客户端应用程序和服务所依赖的共享程序集中

如果您的客户机正在进行非SOAP调用(对“webHttpBinding”端点),则可以使用DataContractSerializer手动序列化相应的数据协定,以发布到服务器

如果需要从无法访问DataContractSerializer的客户端(非.NET客户端)发布XML,则需要手动构造输入。因此,至少,您需要序列化您的数据契约,并将结果用作从客户端手工构建输入消息的文档

RESTful“get”请求类似于基于标识符获取资源,因此通常不需要序列化或手动构造一些复杂的XML或json结构


还请注意,并非所有非SOAP服务都是RESTful的。

通常,如果服务不公开其元数据,则会有文档描述其格式。或者,客户端和服务可以共享包含此信息的库。如果这样,则与使用代理/服务引用类似,使用REST服务的好处是什么?web服务公开方法,REST公开资源。这是一个不同的东西,在不同的情况下使用。所以说它不是常规WCF服务的完全替代品是正确的?它可以是WCF的完全替代品-但它非常不同,不是一种技术,更多的是一种方法。我建议你读“实践中的休息”()