2012-06-25 80 views
2

我有一個非常簡單的WCF服務運行,它有一個方法根據方法的結果返回一個枚舉。從WPF客戶端調用WCF方法什麼也不做

我已經測試了這個WCF服務,通過一個非常簡單的控制檯應用程序本地和通過互聯網到我的服務器,都工作得很好。但是,一旦我使用,確切的,在我的WPF應用程序調用該方法的代碼什麼也不做。沒有例外,沒有超時。在WCF方法開始時使用斷點在本地測試它我發現它在從WPF調用它時甚至沒有達到那麼遠。

在app.config中生成的兩個服務引用配置在控制檯和WPF應用程序之間是相同的。

編輯:本來希望不需要在這裏放置儘可能多的代碼,但我只是傾倒整個事情。

在WPF中,代碼是從對話框中的按鈕調用的。該按鈕使用Caliburn.Micro觸發協調程序呼叫。然後在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()); 
    } 
} 
+0

沒有進入問題:它是否達到您在上面提供的線? –

+0

這只是我用來調用方法的代碼。創建客戶端並調用方法是我所做的全部 – Perry

+1

這個問題很可能與WPF應用程序中的SendReport被調用的地方有關,而不是在SendReport本身。您是否可以編輯您的問題以包含調用代碼? –

回答

0

原因確實是某種線程。雖然不滿意現在的實施。

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