收到推送通知消息时的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消息可以吗?此外,推送服务可以同时发送大量数据。我如何限制它,使我的服务器即使使用大容量数据也能正常工作。

问候

收到推送通知消息时的WCF操作协定类型

我有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的实例,该实例将在您的方法中可用。