我有一个由另一个项目引用的Web服务项目。在Web服务中,我有一个函数,我想用它来填充telerik radTreeView。 webService构建成功,但如果我尝试更新/添加Web服务到我的主项目,我会收到此错误:
Metadata contains a reference that cannot be resolved: 'http://localhost:49304/Service1.asmx'.
There was an error downloading 'http://localhost:49304/Service1.asmx/_vti_bin/ListData.svc/$metadata'.
对于意外以“/_vti_bin/ListData.svc/$metadata”结尾的URL,无法识别请求格式。
这是我正在编写的Web服务类的简化版本:
namespace MCMwebservice
{`
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[ScriptService]
public class Service1 : System.Web.Services.WebService
{
[WebMethod]
public bool getBool(RadTreeView TreeSites, string Demogs) { //dummy method for now
return true;
}
}
如果我删除了telerik radtreeview参数,那么它会更新,所以我知道这是问题所在。主项目有telerik.web.ui和skins dll。是否需要添加到我的主项目或web.config中的某个引用或标记?请帮助!
感谢
威尔
答案 0 :(得分:2)
看起来WCF并不知道如何序列化你的telerik控件,所以要么将一些简单的类型变量传递给WCF,要么为它创建自己的序列化器。
您应该创建自己的树类,您可以在WCF服务和客户端之间作为WCf中的数据合同传递,然后将其公开给客户端,
此外,您无法在客户端和服务端创建相同的类。当您引用它时,WCF会创建它自己的代理,因此它需要在WCF中声明为DataContract。
通常如何做到这一点:
[DataContract]
public class YouTelerikData
{
// Apply the DataMemberAttribute to the property.
[DataMember]
public string SomeData {get; set; }
[DataMember]
public int SomeInt {get; set;}
}
然后将上面的类传递给您的WCF服务,该服务将正确序列化
[OperationContract]
bool SendData(YourTelerikData someData);
但是,我认为你需要传递一些树(如控制名称所示),这将很难。
我在这里找到了解决这个问题的方法: