-1

別のプロジェクトから参照されている Web サービス プロジェクトがあります。Web サービスには、テレリック 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 パラメータを削除すると更新されるので、それが問題であることはわかっています。メイン プロジェクトには、telek.web.ui とスキン dll があります。メイン プロジェクトまたは web.config に追加する必要がある特定の参照またはタグはありますか? 助けてください!

ありがとう

意思

4

1 に答える 1

2

WCF はテレリック コントロールをシリアル化する方法を認識していないようです。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 に答える