1

私は Entity Framework を使用し、データベースを照会するために dbContext を実装した wcf アプリケーションを持っています。ブラウザーで svc ファイルを表示すると、操作が表示されます。

次のようなインターフェイス クラスがあります。

    [ServiceContract]
    public interface IService1
    {
        [OperationContract]
       List<BooksModels> GetBooksList();

        [OperationContract]
        BooksModels GetBook(int id);

    }

このようにsvc.csファイルに実装があります

    public List<BooksModels> GetBooksList()
    {
        MVCEntity en = new MVCEntity();
      return  en.book.ToList();

    }

    public int GetBookId(int id)
    {
        //return db.book.Find(id);
        return 1;
    }

BooksModels クラスは次のようになります

[DataContract]
    public class BooksModels
        {
            [Key]
            [DataMember]
            public int BookId { get; set; }
            [DataMember]
    public string BookName{get;set;}
    }

wcf サービス アプリケーションの作成時に作成されたデフォルトの設定ファイルを設定します。

しかし、MVC wcf クライアントから GetBooksList サービスを呼び出すと、次のエラーが表示されます。

サービスの呼び出しに失敗しました。考えられる原因: サービスがオフラインであるか、アクセスできません。クライアント側の構成がプロキシと一致しません。既存のプロキシは無効です。詳細については、スタック トレースを参照してください。新しいプロキシを開始するか、デフォルト構成に復元するか、サービスを更新することで、回復を試みることができます。

しかし、1を返す2番目のメソッドを呼び出すと.

サービスがdbContextを使用してデータを返すとエラーが発生し、そうでない場合は問題ないことを調べました。

私はさまざまなブログやスタックオーバーフローの質問を調べましたが、役に立ちませんでした。では、この問題にどのように対処できますか。ありがとう

4

2 に答える 2

0

私も同じ問題を抱えていました。Brice2Paris のおかげで、EF のプロキシをオフにして解決しました。

context.Configuration.ProxyCreationEnabled = false;
于 2015-07-01T08:34:02.223 に答える
0

シリアル化の問題だと思います。エンティティ フレームワークから List を取得し、シリアル化してから逆シリアル化し、シリアル化の前後を比較するビジネス レイヤーからシリアル化テストを作成します。

DataContractSerializer を使用します。

DataContractSerializer serialiser = new DataContractSerializer(typeof(List<BooksModels>));
List<BooksModels> expected = business.GetBooksList();
Stream stream = new MemoryStream();
serialiser.WriteObject(stream, expected);
stream.Position = 0;
List<BooksModels> actual = serialiser.ReadObject(stream) as List<BooksModels>;
Assert.IsNotNull(actual);
Assert.AreEqual(expected.Prop1, actual.Prop1);
Assert.AreEqual(expected.Prop2, actual.Prop2);
// ... //

うまくいかない場合は、エンティティ フレームワークでプロキシを使用している可能性があります。プロキシをオフにする:

context.ContextOptions.ProxyCreationEnabled = false;
于 2013-08-07T12:37:39.163 に答える