配置来自 Nifi 的 GET 请求

Configuring GET Request from Nifi

我正在尝试从浏览器访问 WCF 服务。我正在从我的浏览器向 WCF 服务发送 GET 请求。供您参考,详细如下一个WCF服务如下。

服务契约定义如下:

    [ServiceContract]
    public interface IBZTsoftsensor_WcfService {

    [OperationContract]
   [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, UriTemplate = "json/?inputModel={inputModel}")]
      string ExecuteModelJson(string inputModel);
    } 

而这个接口的实现如下:

public string ExecuteModelJson(string inputModel){
  try
  {
    BZTsoftsensor_ModelInput input =   JsonConvert.DeserializeObject<BZTsoftsensor_ModelInput>(inputModel);
  var results = this.ExecuteModel(input);
  return JsonConvert.SerializeObject(results);
  }
  catch (Exception ex)
  {
    return ex.Message;
  } 
 } 

当我使用 URL

从浏览器 访问此 WCF 服务时
http://localhost:8733/Design_Time_Addresses/WcfServiceLibrary1/Service1/json/?inputModel={"Pyro":"30.0","O2":"20.0"} 

我的 WCF 服务响应成功。

但是,使用上述 URL,当我配置 GeTHTTP Nifi 处理器时,处理器在 GET 请求 URL 中出错了非法字符。

你能告诉我吗 - 我必须在 GET URL 中做哪些更改,同时使用 GetHTTP 处理器?

您可能需要对您的inputModel参数进行编码,您可以使用NiFi表达式语言的urlEncode方法:

https://nifi.apache.org/docs/nifi-docs/html/expression-language-guide.html#urlencode

试试这个作为 URL 属性:

http://localhost:8733/Design_Time_Addresses/WcfServiceLibrary1/Service1/json/?inputModel=${literal("{\"Pyro\":\"30.0\",\"O2\":\"20.0\"}"):urlEncode()}

或者,由于您的 URL 是固定的,您可以使用 online encoding tool 对其进行编码,它给出如下内容:

http://localhost:8733/Design_Time_Addresses/WcfServiceLibrary1/Service1/json/?inputModel=%7B%22Pyro%22%3A%2230.0%22%2C%22O2%22%3A%2220.0%22%7D%20