收到推送通知消息时的WCF操作协定类型
本文关键字:操作 WCF 类型 通知 消息 | 更新日期: 2023-09-27 18:01:12
我有Restful WCF服务,它将用于读取互联网上托管的另一个Restful服务的数据推送。我必须公开一个方法来读取另一个服务推送的Json数据。
[ServiceContract]
public interface ITestService
{
[OperationContract]
[WebInvoke( Method = "GET",
ResponseFormat = WebMessageFormat.Json )]
string GetData(string JsonData);
}
在GET方法中接收Push消息可以吗?此外,推送服务可以同时发送大量数据。我如何限制它,使我的服务器即使使用大容量数据也能正常工作。
问候
我有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是一个c#类型,它对应于您的JSON负载。JSON将被干净地反序列化为MyData的实例,该实例将在您的方法中可用。