5

WCF サービスで非同期メソッドを作成しようとしていますが、上記の件名のエラー メッセージが表示されます。単にカテゴリのリストを返したいだけです。

わかりやすくするために、上記のエラー メッセージの最後に次を追加してください: YeagerTechModel.Category[]

wcfclient サービスは、このメソッド (横に赤い「X」が付いている) を除いて正常に追加されました。実際には、すべてのメソッド (wcf サービス クライアント内) は、関連付けられた非同期メソッド (赤い「X」が付いている) と、残りの通常の同期メソッドを組み合わせて使用​​する必要があります。

WCF の使用方法は知っていますが、専門家ではありません。これを正しく機能させるにはどうすればよいですか?

私は VisualStudio 2013 の本格的なリリース バージョンを使用しており、4.5.1 フレームワークを使用するプロジェクトを持っています。EntityFramework 6も使用しています。

私のサービス コントラクトには、次の名前空間が含まれています。

using System.Threading.Tasks;

私の運用契約は以下の通りです。

[OperationContract(Name="GetCategoriesAsync")]
Task<List<Category>> GetCategoriesAsync();

私の DataContract は次のとおりです。

namespace YeagerTechModel
{
    using System;
    using System.Runtime.Serialization;
    using System.ServiceModel;
    using System.Collections.Generic;

    [Serializable, DataContract(IsReference = true)] 
    public partial class Category
    {
        public Category()
        {
            this.Projects = new HashSet<Project>();
        }

        [DataMember]
        public short CategoryID { get; set; }
        [DataMember]
        public string Description { get; set; }

        [DataMember]
        public virtual ICollection<Project> Projects { get; set; }
    }
}

私のWebサービスのメソッドは次のとおりです。設計時のコンパイル エラーはなく、ソリューションを正常にビルドできることに注意してください。

public async Task<List<Category>> GetCategoriesAsync()
        {
            try
            {
                using (YeagerTechEntities DbContext = new YeagerTechEntities())
                {
                    DbContext.Configuration.ProxyCreationEnabled = false;
                    DbContext.Database.Connection.Open();

                    var category = await DbContext.Categories.ToListAsync();

                    return category;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
4

2 に答える 2

0

アクションからサフィックス「Async」を削除してみてください。私はそれが予約されていると信じています。

それを証明することはできませんが、VS 2013 Update 1 で何かが静かに変更されたと思います。タスク アクションを呼び出すことができなかったのを覚えているので、できるようになりました。

[ServiceContract]
public interface IXmlImportService
{
    [OperationContract]
    Task<ImportResult> Import(ImportRequest request);
}

そしてここでそれを使用するWCFテストクライアント。

非同期操作で WCF サービスにアクセスする WCF テスト クライアント

于 2014-02-11T08:47:16.473 に答える