AWS 机器学习 RealTimePredictor returns C# 中的 UnknownoperationException

AWS Machine Learning RealTimePredictor returns UnknownoperationException in C#

使用 Visual Studio 和 AWS .NET V 3.0。

我正在尝试执行实时预测操作,并验证基本设置是否有效,我首先执行有效的 GetMLModel() 和 returns 端点(文档中的某处是提到使用该结果作为服务端点,但它与控制台中列出的相同)。有状态 "READY",到目前为止一切顺利。

异常发生在 "Prediction P = RTP.Predict(Data)" 下面的行中。数据包含一个包含所有预测值的字典。

错误: 发出请求时出错,错误代码为 UnknownOperationException,Http 状态代码为 BadRequest。服务没有返回更多错误信息。

public static APIResult GetRealTimePrediction(Dictionary<string, string> Data, string PayloadJSON = null) {

        AmazonMachineLearningConfig MLConfig = new AmazonMachineLearningConfig();

        MLConfig.RegionEndpoint = Amazon.RegionEndpoint.USEast1;
        MLConfig.Validate();

        AmazonMachineLearningClient MLClient = new AmazonMachineLearningClient("xxx", "xxx", MLConfig);
        GetMLModelResponse MLMOdelResp =  MLClient.GetMLModel("xxx"); // <-- WORKS

        MLConfig.ServiceURL = MLMOdelResp.EndpointInfo.EndpointUrl;
        Console.WriteLine(MLConfig.ServiceURL);
        MLConfig.Validate();

        Amazon.MachineLearning.Util.RealtimePredictor RTP = new Amazon.MachineLearning.Util.RealtimePredictor(MLClient, "xxx");
        Prediction P = RTP.Predict(Data); // <----------------EXCEPTION HERE

}

(明显把xxx替换成相关值):)

原来是这一行:

MLConfig.ServiceURL = MLMOdelResp.EndpointInfo.EndpointUrl;

例 MLConfig.RegionEndpoint 被重置。尽管文档表明 RegionEndpoint 可以从 ServiceURL 确定(我很确定我读过),但在 RTP.Predict(Data) 调用之前需要再次设置 RegionEndpoint。

一旦我明白了这一点,我就能够将代码缩减为这样,以防其他人需要帮助。我想在配置中添加太多信息并不是一件好事,就像 AWS 一样。 NET 库似乎可以自行解决所有这些问题。

public static APIResult GetRealTimePrediction(Dictionary<string, string> Data, string PayloadJSON = null) {
        AmazonMachineLearningConfig MLConfig = new AmazonMachineLearningConfig();
        MLConfig.RegionEndpoint = Amazon.RegionEndpoint.USEast1;
        MLConfig.Validate(); // Just in case, not really needed

        AmazonMachineLearningClient MLClient = new AmazonMachineLearningClient("xxx", "xxx", MLConfig);

        Amazon.MachineLearning.Util.RealtimePredictor RTP = new Amazon.MachineLearning.Util.RealtimePredictor(MLClient, "xxx");
        Prediction P = RTP.Predict(Data);
}