WCF - 返回多个记录

时间:2010-12-11 13:04:51

标签: wcf datatable records

上周我创建了一个asmx web服务,它使用soap返回多行。

我现在转到WCF并且我想要做同样的事情。

在我的ASMX网络服务中,我正在执行以下操作..

public class sample
{
    public string Id { get; set; }
    public string Name { get; set; }
    public string NameOfFile { get; set; }
    //public int Distance { get; set; }
}

[WebMethod]
public sample[] Test(int count, float lat, float lng)
{
    DataTable dt = new Gallery().DisplayNearestByLatLong(count, lat, lng);
    var samples = new List<sample>();

    foreach (DataRow item in dt.Rows)
    {
        var s = new sample();
        s.Id = item[0].ToString();
        s.Name = item[1].ToString();
        s.NameOfFile = item[2].ToString();
        //s.Distance = (int)item[3];

        samples.Add(s);
    }
    return samples.ToArray();
}

这段代码效果很好,但现在我想做同样但使用WCF。

我当前的WCF文件看起来像这样(我复制了一个教程,但设置了数据合同(我认为需要它?)

GalleryWebService.cs
public class GalleryWebService : IGalleryWebService
{
    public string GetData(int value)
    {
        return string.Format("You entered: {0}", value);
    }

    public CompositeType GetDataUsingDataContract(CompositeType composite)
    {
        return composite;
    }

    public CompositeType GetTestData()
    {
        return new CompositeType();
    }
}

IGalleryWebService.cs

[ServiceContract]
public interface IGalleryWebService
{
    [OperationContract]
    string GetData(int value);

    [OperationContract]
    CompositeType GetDataUsingDataContract(CompositeType composite);

    [OperationContract]
    [WebGet(BodyStyle = WebMessageBodyStyle.Bare,
            RequestFormat = WebMessageFormat.Json,
            ResponseFormat = WebMessageFormat.Json,
            UriTemplate = "test/random")]
    CompositeType GetTestData();
}

[DataContract]
public class CompositeType
{
    [DataMember]
    string _id;
    public string Id
    {
        get { return _id; }
        set { _id = value; }
    }

    [DataMember]
    string _name = "Hello";
    public string Name
    {
       get { return _name; }
       set { _name = value; }
    }

    [DataMember]
    string _nameoffile = "Hello";
    public string NameOfFile
    {
       get { return _nameoffile; }
       set { _nameoffile = value; }
    }
}

最好的方法是做什么以及如何做?非常感谢您的帮助!

提前致谢。

1 个答案:

答案 0 :(得分:2)

WCF没有那么多差异:

[DataContract]
public class sample
{
    [DataMember]
    public string Id { get; set; }
    [DataMember]
    public string Name { get; set; }
    [DataMember]
    public string NameOfFile { get; set; }
}

DataMember属性默认情况下未设置,因此它们是必须的。

[ServiceContract]
public interface IGalleryWebService
{

    [OperationContract]
    sample[] Test(int count, float lat, float lng);
}

此外,如果您使用basicHttpBinding并使用“添加Web引用”(而不是服务引用)添加链接 - 您将收到与使用asmx服务时相同的结果。