我从这里得到了一些关于servicestack的很好的解决方案,现在我在2步之间,我已经选择了其中之一。请理解我的实际场景,如下
我已经使用Servicestack和一个模型(类)创建了一个REST WCF,如下所示
public class Perfmon
{
public long id { get; set; }
public string appliationId { get; set; }
public string cpuUsage { get; set; }
public string availableMemory { get; set; }
.......
.......
} 现在,我想从另一个EXE项目中调用此服务,如下所示
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字符串,则如下所示
[{1:"22", 2:"123", 3:"60", ..... }] (其中1代表id,2代表applicationid ..to只是缩短json字符串)然后我需要将它转换为C#类,以便在post请求中传递对象,我仍然需要找到映射(1,2 ..)的方法。
第二种选择有些令人困惑,但如果我可以使用它,那么我的客户要求在post请求中手动传递json字符串。
请帮助我选择更好的选项,因为在简单的Rest WCF中,我们不需要使用class (Model)引用来发出post请求。
如果它没有意义,那么我可以更详细地澄清它
提前感谢
发布于 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服务请求。
curl -d "id=1&appliationId=2" http://example.com/myserviceurl/perfmon有关这方面的示例,请参阅Google's Weather API。否则,您可以只记录REST apis like twitter does,并向它们显示GET查询字符串或POST表单数据示例以及示例输出。
https://stackoverflow.com/questions/8018640
复制相似问题