1
A
回答
1
在調用UploadStringAsync之後,您的程序正在退出,因此它沒有時間獲取響應。在下面的代碼中,如果我在Main方法的末尾刪除Thread.Sleep
調用,它將不會打印任何內容。嘗試在退出程序之前等待響應到達。
public class StackOverflow_11218045
{
[ServiceContract]
public interface ITest
{
[OperationContract]
string Echo(string text);
}
public class Service : ITest
{
public string Echo(string text)
{
return text;
}
}
public static void Main()
{
string baseAddress = "http://" + Environment.MachineName + ":8000/Service";
ServiceHost host = new ServiceHost(typeof(Service), new Uri(baseAddress));
host.AddServiceEndpoint(typeof(ITest), new BasicHttpBinding(), "");
host.Open();
Console.WriteLine("Host opened");
string data = @"<s:Envelope xmlns:s=""http://schemas.xmlsoap.org/soap/envelope/"">
<s:Header/>
<s:Body>
<Echo xmlns=""http://tempuri.org/"">
<text>Hello</text>
</Echo>
</s:Body>
</s:Envelope>";
var client = new WebClient();
client.UploadStringCompleted += new UploadStringCompletedEventHandler(client_UploadStringCompleted);
client.Headers[HttpRequestHeader.ContentType] = "text/xml; charset=utf-8";
client.Headers.Add("SOAPAction", "http://tempuri.org/ITest/Echo");
ManualResetEvent evt = new ManualResetEvent(false);
client.UploadStringAsync(new Uri(baseAddress), "POST", data, evt);
evt.WaitOne();
}
static void client_UploadStringCompleted(object sender, UploadStringCompletedEventArgs e)
{
Console.WriteLine(e.Result);
((ManualResetEvent)e.UserState).Set();
}
}
2
而不是試圖獲得異步方法的工作,你可以嘗試使用非異步方法,但讓它異步使用工作Task Parallel Library:
var client = new WebClient();
var data = File.ReadAllText("request.xml");
client.Headers.Add("Content-Type", "text/xml;charset=utf-8");
client.Headers.Add("SOAPAction", "some string");
Task.Factory.StartNew(() =>
{
string returnVal = client.UploadString(new Uri("http://differentdomain/wcf/Service.svc"), data);
Console.WriteLine(returnVal);
});
這是一個總體較好策略,因爲它適用於所有長時間運行的操作,而不僅僅是那些具有Async方法和事件處理程序的操作。
它也應該使任何發生的通信/傳輸錯誤更容易發生。
+0
感謝您的新方法。 – VVV
相關問題
- 1. UploadStringAsync不工作
- 2. UploadStringAsync在Windows Phone 8中不起作用
- 3. 工作不C#
- 4. ShellExecute不工作C++
- 5. SendInput(C++)不工作
- 6. C++ - string.replace不工作
- 7. C++ SetWindowText不工作
- 8. DataAdapter.UpdateCommand不工作c#?
- 9. C#:Thread.Sleep不工作
- 10. strstr()不工作C
- 11. C++,find_if不工作
- 12. 工作不是C++
- 13. 用C#不工作
- 14. C#WaitForExit()不工作?
- 15. C++ Timer不工作?
- 16. C#UploadString不工作
- 17. C#Parallel.ForEach,不工作
- 18. c + + pthread不工作
- 19. C#Window_KeyUp()不工作
- 20. C#File.Delete不工作
- 21. C#Application.exit不工作
- 22. C++,cin.get();不工作
- 23. C#Loggly.info不工作
- 24. C#Timer.Stop()不工作
- 25. C Makefile不工作
- 26. C#Fields.Update不工作
- 27. Command.Parameters.Add不工作? C#
- 28. WaitForSeconds不工作[c#]
- 29. C++ ShellExecute不工作
- 30. C++ ==操作符不工作
「睡眠」調用只是爲了表明您沒有得到響應,因爲程序在到達之前退出。一個更好的解決方案(我編輯我的代碼)應該是在發生之前不會退出(例如,使用如上所示的事件)。 – carlosfigueira
感謝您的澄清。 – VVV