从沙盒切换到生产时,AWS Turk NotifyWorker 方法不适用于 .NET SDK
AWS Turk NotifyWorker method not working with .NET SDK when switching from Sandbox to Production
我在 .NET C# 中创建了一个小应用程序,允许我使用工人 ID 向他们发送电子邮件。我向我自己的个人 Worker ID 发送了一封电子邮件,当我在 App.config 文件中将我的服务端点设置为 https://mechanicalturk.sandbox.amazonaws.com?Service=AWSMechanicalTurkRequester 时,它工作正常。
然而,当我将服务端点切换到 https://mechanicalturk.amazonaws.com?Service=AWSMechanicalTurkRequester 时,电子邮件永远不会到达。
NotifyWorker 方法在 SDK 中似乎也没有任何响应方法,就像它在 XML 响应形式的普通 URI 请求中那样,因此调试起来非常令人恼火。
有谁知道为什么当我切换服务端点时,消息永远不会到达?
(请求编辑)这是运行主要功能的代码:
public class WorkerArgs
{
public string FileName { get; set; }
public bool Mass { get; set; }
public string WorkerID { get; set; }
public string Message { get; set; }
public string Subject { get; set; }
public WorkerArgs(string fileName, bool mass, string message, string subject)
{
this.FileName = fileName;
this.Mass = mass;
this.Message = message;
this.Subject = subject;
}
public WorkerArgs(bool mass, string workerId, string message, string subject)
{
this.Mass = mass;
this.WorkerID = workerId;
this.Message = message;
this.Subject = subject;
}
}
private void bwRun_DoWork(object sender, DoWorkEventArgs e)
{
WorkerArgs args = (WorkerArgs)e.Argument;
if (args.Mass)
{
List<string> workers = CSVProcessor.GetUniqueWorkers(args.FileName);
for (int i = 0; i < workers.Count(); i += 100) {
MessageSender.SendMessage(args.Subject, args.Message, workers.Skip(i).Take(100).ToList());
}
}
else
{
MessageSender.SendMessage(args.Subject, args.Message,new List<string>(new string[] { args.WorkerID }));
}
}
class CSVProcessor
{
public static List<string> GetUniqueWorkers(string fileName)
{
//WorkerCollection workers = new WorkerCollection();
List<string> workers = new List<string>();
using (TextFieldParser tfp = new TextFieldParser(fileName))
{
tfp.Delimiters = new string[] { "," };
tfp.ReadFields();
while (!tfp.EndOfData)
{
string[] values = tfp.ReadFields();
if (!String.IsNullOrWhiteSpace(values[21])) { workers.Add(values[15]); } //{ workers.addUniqueWorker(values[15]); }
}
}
return workers.Distinct().ToList();
}
}
class MessageSender
{
public static void SendMessage(string subject, string messageText, List<string> workerIDs) {
SimpleClient client = new SimpleClient();
client.NotifyWorkers(subject, messageText, workerIDs);
}
}
解决了问题。 Amazon Turks 只允许您为已为您完成 HIT 的工作人员通知工作人员。由于我一直在发消息的人没有为我完成 HIT,唯一成功的人是沙箱中我自己的工作人员 ID(这是我完成自己的一些 HIT 的地方),这就是缺少消息到达。
我在 .NET C# 中创建了一个小应用程序,允许我使用工人 ID 向他们发送电子邮件。我向我自己的个人 Worker ID 发送了一封电子邮件,当我在 App.config 文件中将我的服务端点设置为 https://mechanicalturk.sandbox.amazonaws.com?Service=AWSMechanicalTurkRequester 时,它工作正常。
然而,当我将服务端点切换到 https://mechanicalturk.amazonaws.com?Service=AWSMechanicalTurkRequester 时,电子邮件永远不会到达。
NotifyWorker 方法在 SDK 中似乎也没有任何响应方法,就像它在 XML 响应形式的普通 URI 请求中那样,因此调试起来非常令人恼火。
有谁知道为什么当我切换服务端点时,消息永远不会到达?
(请求编辑)这是运行主要功能的代码:
public class WorkerArgs
{
public string FileName { get; set; }
public bool Mass { get; set; }
public string WorkerID { get; set; }
public string Message { get; set; }
public string Subject { get; set; }
public WorkerArgs(string fileName, bool mass, string message, string subject)
{
this.FileName = fileName;
this.Mass = mass;
this.Message = message;
this.Subject = subject;
}
public WorkerArgs(bool mass, string workerId, string message, string subject)
{
this.Mass = mass;
this.WorkerID = workerId;
this.Message = message;
this.Subject = subject;
}
}
private void bwRun_DoWork(object sender, DoWorkEventArgs e)
{
WorkerArgs args = (WorkerArgs)e.Argument;
if (args.Mass)
{
List<string> workers = CSVProcessor.GetUniqueWorkers(args.FileName);
for (int i = 0; i < workers.Count(); i += 100) {
MessageSender.SendMessage(args.Subject, args.Message, workers.Skip(i).Take(100).ToList());
}
}
else
{
MessageSender.SendMessage(args.Subject, args.Message,new List<string>(new string[] { args.WorkerID }));
}
}
class CSVProcessor
{
public static List<string> GetUniqueWorkers(string fileName)
{
//WorkerCollection workers = new WorkerCollection();
List<string> workers = new List<string>();
using (TextFieldParser tfp = new TextFieldParser(fileName))
{
tfp.Delimiters = new string[] { "," };
tfp.ReadFields();
while (!tfp.EndOfData)
{
string[] values = tfp.ReadFields();
if (!String.IsNullOrWhiteSpace(values[21])) { workers.Add(values[15]); } //{ workers.addUniqueWorker(values[15]); }
}
}
return workers.Distinct().ToList();
}
}
class MessageSender
{
public static void SendMessage(string subject, string messageText, List<string> workerIDs) {
SimpleClient client = new SimpleClient();
client.NotifyWorkers(subject, messageText, workerIDs);
}
}
解决了问题。 Amazon Turks 只允许您为已为您完成 HIT 的工作人员通知工作人员。由于我一直在发消息的人没有为我完成 HIT,唯一成功的人是沙箱中我自己的工作人员 ID(这是我完成自己的一些 HIT 的地方),这就是缺少消息到达。