-1

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

谢谢

将要

4

1 回答 1

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

但是,这会很困难,因为我假设您需要传递一些树(正如控件名称所暗示的那样)。

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

通过 WCF 传递递归集合

于 2013-08-24T00:54:33.343 回答