【发布时间】:2014-08-08 16:14:16
【问题描述】:
有人可以解释我的程序的奇怪行为吗?
我创建了一个网络服务。它包含一个生成一组三维随机向量的方法,这些向量的正坐标和等于 1。为了生成这些向量,我使用来自here 的类RandomNess。我的代码如下:
[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class Service1
{
[OperationContract]
public void GenerateRandomVectors()
{
RandomNess.RandomNess rand = new RandomNess.RandomNess();
var vector = new List<double>();
for (int i = 0; i < 1000; i++)
{
//The first parameter of RandFixedSum is dimension of vector;
//The second parameter is a required sum of elements;
//The third and the fourth parameters are bounds for elements;
vector = rand.RandFixedSum(3, 1, 0, 1);
//Writing obtained vector to a file;
...
}
return;
}
}
我使用以下代码从 Silverlight 应用程序调用服务:
ServiceReference1.Service1Client web;
web = new ServiceReference1.Service1Client();
web.GenerateRandomVectorsAsync();
当我将结果可视化时,我看到获得的点只填充了标准单纯形的一部分。因此,该方法给出了错误的结果(参见图片here)。
但是(!)如果我直接从 Silverlight 应用程序(不是从 Web 服务)或从 Windows 窗体应用程序调用方法 RandFixedSum(...),我将获得绝对正确的分布(点填充标准单纯形的所有表面)。
我的网络服务出了什么问题?为什么会给出错误的结果?
【问题讨论】:
-
您是否查看了该文件以验证它是否具有预期的值?写入文件的代码是什么样的?
-
另一个想法:我看到您正在调用
Async网络方法。当您的 Silverlight 代码读取文件时,该文件是否可能尚未完成写入? -
不幸的是,文件写入是绝对正确的。当我阅读它时,该文件包含所有 1000 个向量。
-
... 那么异步问题呢?
-
当我读取文件时,写入文件已完成(它包含所有 1000 条记录)。可能是异步调用的问题,但这是什么问题?为什么异步调用会给出错误的结果?
标签: c# web-services wcf silverlight random