首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用servicestack使用REST WCF有什么更好的选择

使用servicestack使用REST WCF有什么更好的选择
EN

Stack Overflow用户
提问于 2011-11-05 14:43:23
回答 2查看 1.6K关注 0票数 2

我从这里得到了一些关于servicestack的很好的解决方案,现在我在2步之间,我已经选择了其中之一。请理解我的实际场景,如下

我已经使用Servicestack和一个模型(类)创建了一个REST WCF,如下所示

代码语言:javascript
运行
复制
public class Perfmon
{
        public long id { get; set; }
        public string appliationId { get; set; }

        public string cpuUsage { get; set; }
        public string availableMemory { get; set; }
        .......
        .......
} 

现在,我想从另一个EXE项目中调用此服务,如下所示

代码语言:javascript
运行
复制
 JsonServiceClient client = new JsonServiceClient("myserviceurl");
 RESTWCF.ServiceModel.Perfmon p = new RESTWCF.ServiceModel.Perfmon();
 var res = client.Post<RESTWCF.ServiceModel.Perfmon>("/perfmon", p);

现在我有两个选项,如下所示

1)我需要将XSD转换为类,并使用它的对象来传递post请求,根据我提出的问题How can i convert XSD file to C# Class,但我不能使用XSD.exe实用程序直接使用URL生成类。

2)手动传递json字符串如果我有json字符串,则如下所示

代码语言:javascript
运行
复制
[{1:"22", 2:"123", 3:"60", ..... }] 

(其中1代表id,2代表applicationid ..to只是缩短json字符串)然后我需要将它转换为C#类,以便在post请求中传递对象,我仍然需要找到映射(1,2 ..)的方法。

第二种选择有些令人困惑,但如果我可以使用它,那么我的客户要求在post请求中手动传递json字符串。

请帮助我选择更好的选项,因为在简单的Rest WCF中,我们不需要使用class (Model)引用来发出post请求。

如果它没有意义,那么我可以更详细地澄清它

提前感谢

EN

Stack Overflow用户

回答已采纳

发布于 2011-11-05 16:23:09

不确定为什么您不能从XSD.exe生成模型类-但这实际上并不是必需的。使用ServiceStack的正常方式是将所有ServiceModel类(即DTO)放在一个独立的无依赖程序集中,并将其与一个通用的JSON/JSV/XML/SOAP服务客户端一起使用。

如果您已经让XSD.exe生成了DTO类,那么它只会生成您的ServiceModel.dll的副本程序集。如果你不想给他们提供dll,那么只需要给他们DTO源代码--这基本上就是XSD.exe实用程序生成的代码(只是更干净一些,因为代码生成包含了很多繁琐的东西/样板文件)。

那么,为什么要经历所有额外的代码生成+构建步骤呢?尤其是在生成时遇到问题的情况下。

这两个选项都可以工作,最理想的是提供强类型的DTO并使用通用服务客户机。

如果你想要传递一个JSON字符串,那么你需要使用一个纯的HTTP客户端,例如HttpWebRequest或者新的HttpClient

在没有C#模型的情况下调用ServiceStack REST Web服务

如果不想使用您的服务DTO或ServiceStack XSD.exe生成的服务模型调用C# web服务,而不是发送JSON,请使用用于GET请求的URL或发送标准HTTP POST键值对,例如,用于HTTP POST请求的application/x-www-form-urlencoded。Request DTO会自动填充在QueryString或POST表单数据上发送的任何变量。

一个常见的标准是使用HTTP 或wget来展示如何与REST web服务通信,因为它的功能和用户可以很容易地使用他们最喜欢的HTTP来模拟web服务请求。

代码语言:javascript
运行
复制
curl -d "id=1&appliationId=2" http://example.com/myserviceurl/perfmon

有关这方面的示例,请参阅Google's Weather API。否则,您可以只记录REST apis like twitter does,并向它们显示GET查询字符串或POST表单数据示例以及示例输出。

票数 3
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8018640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档