2016-02-12 1 views
1

J'ai créé une petite application dans .NET C# qui me permet d'envoyer des emails aux travailleurs en utilisant leur ID travailleur. J'ai envoyé un e-mail à mon propre ID travailleur et cela a bien fonctionné lorsque mon point de terminaison de service a été défini comme https://mechanicalturk.sandbox.amazonaws.com?Service=AWSMechanicalTurkRequester dans le fichier App.config.AWS Turk NotifyWorker méthode ne fonctionne pas avec .NET SDK lors du passage de Sandbox à Production

Toutefois, lorsque je passe le point de terminaison du service à https://mechanicalturk.amazonaws.com?Service=AWSMechanicalTurkRequester, l'e-mail n'arrive jamais. Il ne semble pas non plus que la méthode NotifyWorker ait une méthode de réponse dans le SDK comme dans la requête URI normale sous la forme d'une réponse XML, ce qui rend la mise au point très rageuse.

Est-ce que quelqu'un a des idées pourquoi quand je change de point de terminaison de service, le message n'arrive jamais?

(demandé Edit) Voici le code qui exécute la fonction principale:

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); 
    } 

} 
+0

WinForms ou WPF? S'il vous plaît envoyer le code qui envoie votre email. – StepUp

+0

WinForms, je l'ai divisé en plusieurs classes. Laissez-moi tenter de le décomposer dans une édition – JSArrakis

Répondre

1

cernées la question. Amazon Turks vous permet uniquement de NotifyWorkers pour les travailleurs qui ont rempli des HIT pour vous. Comme les personnes que j'ai envoyées n'ont pas rempli de HIT pour moi et que la seule personne qui a réussi était mon propre ID de travailleur dans le bac à sable (où j'avais complété certains de mes propres HITs), c'est la raison de l'absence de messages arrivant.