2

メソッドの結果に基づいて列挙型を返す単一のメソッドを持つ非常に単純な WCF サービスを実行しています。

この WCF サービスは、非常に単純なコンソール アプリを使用して、ローカルとインターネットの両方でサーバーにテストしましたが、どちらも問題なく動作します。ただし、メソッドを呼び出す WPF アプリケーションで文字通り正確なコードを使用すると、何もしません。例外もタイムアウトもありません。WCF メソッドの開始時にブレークポイントを使用してローカルでテストしたところ、WPF から呼び出すと、それほど遠くまで到達しないことがわかりました。

app.config で生成された両方のサービス参照構成は、コンソールと WPF アプリケーションの間で同一です。

編集:ここにそれほど多くのコードを入れる必要がないことを望んでいましたが、すべてをダンプします。

WPF では、コードはダイアログのボタンから呼び出されています。このボタンは、Caliburn.Micro を使用してコルーチン呼び出しをトリガーします。次に、コルーチンから Execute メソッドで WCF 呼び出しが呼び出されます。

public IEnumerator<IResult> SendReport()
{
    var result = new Coroutines.SubmitNewExceptionIssueResult(Exception, UserNotes, Character);
    yield return result;
    if (result.Result == ErrorReportResult.OK)
        TryClose();
    else
        // TODO
}

public class SubmitNewExceptionIssueResult : IResult
{
    public event EventHandler<ResultCompletionEventArgs> Completed;
    private ErrorReporterClient _client = new ErrorReporterClient();

    private Exception _exception { get; set; }
    private string _userNotes { get; set; }
    private Character _character { get; set; }
    public ErrorReportResult Result { get; private set; }

    public SubmitNewExceptionIssueResult(Exception ex, string userNotes, Character character)
    {
        _exception = ex;
        _userNotes = userNotes;
        _character = character;
    }

    public void Execute(ActionExecutionContext context)
    {
        Result = _client.SendErrorReport(JsonConvert.SerializeObject(_exception, new JsonSerializerSettings
                                         {
                                             TypeNameHandling = TypeNameHandling.All
                                         }),
                                         _userNotes,
                                         JsonConvert.SerializeObject(_character, new JsonSerializerSettings
                                         {
                                             TypeNameHandling = TypeNameHandling.All
                                         }));
        Completed(this, new ResultCompletionEventArgs());
    }
}
4

1 に答える 1

0

原因は確かにある種の糸脱毛でした。実装には満足していませんが、現在は機能しています。

Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Normal, new System.Action(() => { /* send report code */ }));
于 2012-06-26T14:15:44.903 に答える