【发布时间】:2014-06-05 07:55:53
【问题描述】:
我有两个 Web 服务调用,Method1() 和 Method2()。
如果布尔变量设置为 true,则应首先调用 Method1(),然后调用 Method2()。 如果布尔变量设置为 false,则只应调用 Method2()。
当我查看 xml 文件的时间戳时,我可以看到 Method1() 的请求/响应的时间戳比 Method2() 的文件更新,这表明 Method2 在 Method1 之前被调用。
有没有办法在 Method2() 被调用之前等待 Method1() 完成?
var client = new WebServiceClient();
bool myBoolean = true;
if (myBoolean)
{
XmlHandler.ToXML(method1Request, "C:/Temp/method1RQ.xml");
var method1Response = client.Method1(method1Request);
XmlHandler.ToXML(method1Response, "C:/Temp/method1RS.xml");
}
XmlHandler.ToXML(method2Request, "C:/Temp/method2RQ.xml");
var method2Response = client.Method2(method2Request);
XmlHandler.ToXML(method2Response, "C:/Temp/method2RS.xml");
client.Close();
XmlHandler 中的代码:
public static void ToXML(object obj, string savePath)
{
if (obj != null)
{
try
{
if (File.Exists(savePath))
{
File.Delete(savePath);
}
XmlSerializer serializer = new XmlSerializer(obj.GetType());
using (XmlTextWriter xmlWriter = new XmlTextWriter(savePath, System.Text.Encoding.UTF8))
{
serializer.Serialize(xmlWriter, obj);
xmlWriter.Close();
}
}
catch (Exception exc)
{
}
}
}
【问题讨论】:
-
您正在使用同步调用,所以我真的不明白您所描述的情况会如何发生。请出示日志。
-
没错,我也不明白为什么会这样。我在这里稍微简化了代码,但我所做的是将 xml 写入文件以用于 Method1() 调用的请求/响应和 Method2() 调用的请求/响应。然后当我查看 xml 的时间戳时,我看到 Method1() 的文件时间为 09:30:24,Method2() 的时间为 09:30:23,这表明 Method2() 在 Method1() 之前调用)。
-
@bale3;时间戳不匹配的可能原因。根据 ToXML 实现,如果底层文件流未正确处理/刷新,则无法判断哪个文件最后刷新到文件系统。此外,您可以在客户端和服务器中启动调试器并验证程序执行的顺序。
-
MarkO 上的 +1,我刚刚在我的答案中添加了相同的内容。您可以更改代码以使用文件流显式编写 XML 并在流编写器上调用 Dispose 以便获得定义的行为。
-
这些是同步调用,因此定义了顺序。但是,从设计的角度来看,您可能希望为每个布尔值创建额外的服务方法,例如
MethodX{Method1(); Method2();}
标签: c# .net web-services