WCF - вернуть несколько записей - PullRequest
0 голосов
/ 11 декабря 2010

На прошлой неделе я создал веб-сервис asmx, который возвращает несколько строк с использованием мыла.

Сейчас я перехожу на 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 Ответ

2 голосов
/ 11 декабря 2010

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 и добавьте ссылку, используя «Добавить веб-ссылку» (вместо ссылки на службу) - вы получите тот же результат, что и при использовании службы asmx.

...