我有一個允許用戶與之交互的windows phone應用程序。每次交互總是會導致異步的WCF調用。
除此之外,一些交互將導致打開瀏覽器,地圖,電子郵件等......即使調用'void'異步方法,返回按鈕上的'WebException'錯誤
的問題是,點擊返回按鈕時,我有時會收到以下錯誤
"An error (WebException) occurred while transmitting data over the HTTP channel."
以下堆棧跟蹤:
at System.ServiceModel.Channels.HttpChannelUtilities.ProcessGetResponseWebException(WebException webException, HttpWebRequest request, HttpAbortReason abortReason) at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelAsyncRequest.CompleteGetResponse(IAsyncResult result) at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelAsyncRequest.OnGetResponse(IAsyncResult result) at System.Net.Browser.ClientHttpWebRequest.<>c__DisplayClassa.<InvokeGetResponseCallback>b__8(Object state2) at System.Threading.ThreadPool.WorkItem.WaitCallback_Context(Object state) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadPool.WorkItem.doWork(Object o) at System.Threading.Timer.ring()
我的理解是,它的發生,因爲我的應用程序打開另一個應用程序(瀏覽器,地圖等),它必須執行EndMyAsyncMethod(System.IAsyncResult result)
的時間之前。公平的...
真的很煩人的是,它似乎應該通過克隆服務器端的方法得到修復,只使void
與以下操作合同[OperationContract(IsOneWay = true)]
但我仍然得到錯誤。
更糟糕的是,該異常是在系統生成的部分代碼中引發的,因此無法手動捕獲導致應用程序崩潰。
我只是不明白在明確標記爲OneWay
和void
時需要執行方法。
編輯
我沒有找到一個類似的問題here。它似乎確實與消息進入服務(而不是客戶端回調)有關。我的下一個問題是:
如果我現在正在調用標記爲AsyncPattern
和OneWay
的方法,我應該等待客戶端確定消息已成功傳輸?
這是新的服務定義:
[OperationContract(IsOneWay = true, AsyncPattern = true)]
IAsyncResult BeginCacheQueryWithoutCallback(string param1, QueryInfoDataContract queryInfo, AsyncCallback cb, Object s);
void EndCacheQueryWithoutCallback(IAsyncResult r);
和實現:
public IAsyncResult BeginCacheQueryWithoutCallback(string param1, QueryInfoDataContract queryInfo, AsyncCallback cb, Object s)
{
// do some stuff
return new CompletedAsyncResult<string>("");
}
public void EndCacheQueryWithoutCallback(IAsyncResult r)
{
}
你能展示一些代碼,Web服務是如何被稱爲 – 2012-03-31 21:51:42
感謝您的回覆西拉。我在客戶端上使用自動生成的代理,所以代碼沒有太多關於它的內容:MyProxy.CallWebServiceMethod(param1,param2); – BlazingFrog 2012-03-31 23:23:04
我在原始文章中添加了一些代碼 – BlazingFrog 2012-03-31 23:26:56