0

1 つの WCF サービス アプリケーションを作成しました。にはいくつかのメソッドがありますService1.svc

ここに私のIService1.csがあります

[OperationContract]
GetUserDetailsByEmail_Result GetUserDetailsByEmail(string email);

ここに私のService.svc.csがあります

public class Service1 : IService1
{
    #region GetUserDetails
    public GetUserDetailsByEmail_Result GetUserDetailsByEmail(string email)
    {
        return (new UserManager()).GetUserDetailsByEmail(email);
    }
    #endregion    
}

ここでGetUserDetailsByEmail_ResultDemoModel.edmxComplex typeで作成されます。Scalar Propertyが含まれています。

基本的に私がやろうとしているのは、このメソッドをクライアント(c#) 側から呼び出したいということです。これが私のクライアント側のコードです

//svc.GetUserDetailsByEmailCompleted += new EventHandler<GetUserDetailsByEmailCompletedEventArgs>(svc_GetUserDetailsByEmailCompleted);
GetUserDetailsByEmail_Result dtbUserDetails = svc.GetUserDetailsByEmailAsync(loginName);

ここでsvcは のオブジェクトですService1Client。ここでは単に wcf メソッドを呼び出しています。それは私にエラーを与える

タイプ「void」を「Demo.DemoServiceReference_Client.GetUserDetailsByEmail_Result」に暗黙的に変換することはできません

svc_GetUserDetailsByEmailCompletedメソッドを使用すると機能します。しかし、戻りデータを直接dtbUserDetails. どうすればこれを達成できますか?WCF サービスまたはクライアント側に変更はありますか? またはWCFメソッド宣言で?

4

1 に答える 1

0

提案されたコメントの一部の人々のように、オブジェクトを作成してデータをそれにバインドし、各プロパティを次のようにマークする必要があります。

[DataContract(Namespace = "MyServiceContract.Service1.ComplexObject")]
public class ComplexObject
{
       [DataMember(Order = 1, IsRequired = true)]
            public String DbItem1{ get; private set; }
       [DataMember(Order = 2, IsRequired = false)]
            public ComplexBlobData DbItem2{ get; set; }
}

または、DemoModel.edmx(コード ビハインド) を開いて、独自のオブジェクトをマークするのと同じ方法ですべてをデータ コントラクトでマークできる場合。

要するに、マークされていないものはワイヤーを越えていません。

于 2013-08-23T19:56:28.987 に答える