我有Restful WCF服务,该服务将用于读取互联网上托管的另一个Restful服务的数据推送。我必须公开一种方法来读取其他服务的Json数据推送。
[ServiceContract]
public interface ITestService
{
[OperationContract]
[WebInvoke( Method = "GET",
ResponseFormat = WebMessageFormat.Json )]
string GetData(string JsonData);
}
在GET方法中接收Push消息是否可以? Push服务也可以一次发送大量数据。我如何限制它,以便我的服务器即使使用批量数据也能正常工作。
此致
答案 0 :(得分:1)
我有Restful WCF服务,它将用于读取数据推送 另一个Restful服务托管在互联网上的某个地方。
“推”可能是错误的词;它唤起了服务器推送,它与你在这里使用它的方式有着不同的含义。更准确地说,您有一个服务,其他服务将调用,传递一些数据。
在GET方法中接收Push消息是否可以?
不,这不好。 GET操作仅传递查询字符串上的数据。对于由JSON组成的非常短的字符串,这实际上很好(尽管很不寻常),但是更长的字符串可能会违反您在碰巧使用的任何技术堆栈中查询字符串的最大大小限制。
使用POST操作可以起作用:
[ServiceContract]
public interface ITestService
{
[OperationContract]
[WebInvoke( Method = "POST",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
UriTemplate = "GetData" )]
string GetData(string JsonData);
}
但是,您仍然需要手动处理JSON字符串。最常用的方法是定义一个支持JSON序列化的c#类型:
[ServiceContract]
public interface ITestService
{
[OperationContract]
[WebInvoke(Method = "POST",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
UriTemplate = "GetData" )]
string GetData(MyData data);
}
其中MyData是与您的JSON有效负载相对应的c#类型。 JSON将被干净地反序列化为MyData实例,该实例将在您的方法中提供。