上周我创建了一个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; }
}
}
最好的方法是做什么以及如何做?非常感谢您的帮助!
提前致谢。
答案 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服务时相同的结果。