2

我有一个非常简单的 WCF 服务正在运行,它有一个方法,该方法根据方法的结果返回一个枚举。

我已经通过一个非常简单的控制台应用程序在本地和通过 Internet 到我的服务器测试了这个 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 回答