生成随机向量的Web服务的奇怪行为

时间:2014-08-08 16:14:16

标签: c# web-services wcf silverlight random

有人可以解释我的节目的奇怪行为吗?

我创建了一个Web服务。它包含一种方法,该方法生成一组三维随机向量,其正坐标的总和等于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(...),我获得绝对正确的分布(点填充标准单纯形的所有表面)。< / p>

我的网络服务有什么问题?为什么会给出错误的结果?

1 个答案:

答案 0 :(得分:0)

在调用web.GenerateRandomVectorsAsync()之前,您应该订阅web.GenerateRandomVectorsCompleted,然后开始解析由Web服务在事件处理程序中创建的数据文件。