【发布时间】:2012-02-22 01:04:57
【问题描述】:
我创建了一个 REST Web 服务,它在所有其他方面都按照我希望的方式工作。
我有一个包含联系人的主类,在该类中,我创建了另外 2 个类列表。 我的主要课程,其中一个列表来自通话,所有信息都完好无损。但是,第二堂课是空的。它包含列表中的每个项目,但每个列表项目都是空的。
网络服务功能
[OperationContract]
[WebGet(UriTemplate = "/Login/{IQPid}/{Password}")]
public IQP_Contacts Login(string IQPid, string password)
{
int iqpID = 0;
try
{
iqpID = int.Parse(IQPid);
}
catch { return null; }
IQP_Contacts contact = this.Repository.Contacts.Find(delegate(IQP_Contacts c) { return c.IqpID == iqpID; });
if (contact.Password == password)
{
return contact;
}
else return null;
}
调用网络服务的代码
WebClient proxy = new WebClient();
byte[] abc = proxy.DownloadData((new Uri("http://localhost:53468/IQP_Service.svc/Login/" + ID + "/" + password )));
Stream strm = new MemoryStream(abc);
DataContractSerializer obj = new DataContractSerializer(typeof(IQP_Contacts));
IQP_Contacts contact = (IQP_Contacts)obj.ReadObject(strm);
如下所示,我的 webservice 的类包含信息,但网页没有
如果有人有任何想法,请告诉我。我迷路了。这么简单的东西不应该这么坏。谢谢
【问题讨论】:
-
您确定您的 DataContract (IQP_Contacts) 在客户端和服务器上都相同吗?
-
是的,网络服务和网站在同一个地方并且引用了完全相同的类。此外,当仅在浏览器中使用 URI 调用函数以获取 XML 回复时,文件返回空。
-
过去我遇到过类似的问题,当我通过 Visual Studio 进行调试时,我看到我的实体的值已填充,但在传递实体时,成员未填充。我认为在 Visual Studio 中检查属性的行为会触发实体获取其值(不确定这是否是正确的术语)。如果您在 Web 服务中放置一些仅访问属性的打印语句,您可能会发现返回的对象将填充其数据(也许)。
-
这看起来很有趣。虽然只有班级有孩子才重要吗?在这种情况下,我没有使用儿童。只是 IQP_Contacts 类中的 Files 类的列表。
标签: c# web-services