从WPF客户端调用WCF方法不会执行任何操作

时间:2012-06-25 19:25:12

标签: c# wpf wcf

我有一个非常简单的WCF服务运行,它有一个基于方法结果返回枚举的方法。

我已经通过一个非常简单的控制台应用程序在本地和通过互联网测试了这个WCF服务到我的服务器,并且两者都工作得非常好。但是,一旦我在我的WPF应用程序中使用了字面上完全相同的代码,调用该方法就什么也不做。没有例外,没有超时。在WCF方法开始时使用断点在本地测试它我发现从WPF调用它时它甚至都没有达到那么远。

app.config中生成的两个服务引用配置在控制台和WPF应用程序之间都是相同的。

编辑:本来希望不需要在这里放置尽可能多的代码,但我只是抛弃整个事情。

在WPF中,代码是从对话框中的按钮调用的。此按钮使用Caliburn.Micro触发Coroutine调用。然后在Coroutine的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());
    }
}

1 个答案:

答案 0 :(得分:0)

原因确实是某种形式的线索。虽然对实施不满意,但它现在有效。

Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Normal, new System.Action(() => { /* send report code */ }));