【问题标题】:Calling a WCF method from a WPF client does nothing从 WPF 客户端调用 WCF 方法不执行任何操作
【发布时间】:2012-06-25 19:25:12
【问题描述】:

我有一个非常简单的 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());
    }
}

【问题讨论】:

  • 没有从问题中得到答案:它是否达到了您上面提供的行数?
  • 这只是我用来调用该方法的代码。创建客户端并调用方法就是我所做的一切
  • 问题可能与 WPF 应用程序 SendReport 的调用位置有关,而不是与 SendReport 本身有关。您能否编辑您的问题以包含调用代码?
  • 按您的要求添加代码
  • @Nensec 问题实际上是 Execute 方法实际上没有被触发?

标签: c# wpf wcf


【解决方案1】:

原因确实是某种线程。虽然对实施不满意,但它现在可以工作了。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多