添加radtreeView时服务引用不会更新?

时间:2013-08-24 00:11:07

标签: asp.net web-services telerik

我有一个由另一个项目引用的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中的某个引用或标记?请帮助!

感谢

威尔

1 个答案:

答案 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);

但是,我认为你需要传递一些树(如控制名称所示),这将很难。

我在这里找到了解决这个问题的方法:

Passing recursive collection through WCF