Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用mvc4实体框架实现wcf调用方法失败_C#_Wcf_Entity Framework_Asp.net Mvc 4_Dbcontext - Fatal编程技术网

C# 用mvc4实体框架实现wcf调用方法失败

C# 用mvc4实体框架实现wcf调用方法失败,c#,wcf,entity-framework,asp.net-mvc-4,dbcontext,C#,Wcf,Entity Framework,Asp.net Mvc 4,Dbcontext,我有一个wcf应用程序,其中使用了EntityFramework并实现了dbContext来查询数据库。 当我在浏览器中查看svc文件时,它会公开操作 我有这样的接口类: [ServiceContract] public interface IService1 { [OperationContract] List<BooksModels> GetBooksList(); [OperationContract]

我有一个wcf应用程序,其中使用了EntityFramework并实现了dbContext来查询数据库。 当我在浏览器中查看svc文件时,它会公开操作

我有这样的接口类:

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

        [OperationContract]
        BooksModels GetBook(int id);

    }
并将配置文件设置为创建wcf服务应用程序时创建的默认配置文件

但是,当我从MVC wcf客户端调用GetBooksList服务时,它会给出以下错误:

未能调用该服务。可能原因:服务处于脱机状态 或无法接近;客户端配置与配置不匹配 代理现有代理无效。有关详细信息,请参阅堆栈跟踪 更多细节。您可以尝试通过启动一个新的代理进行恢复,恢复 默认配置,或刷新服务

但是当我调用第二个返回1的方法时

我检查了当服务使用dbContext返回数据时,它会给出错误和错误信息 不在的时候是好的

我浏览过各种博客,也看过stackoverflow中的问题,但都没有帮助。 那么如何解决这个问题呢。
谢谢

我认为这是序列化的问题。从您的业务层进行序列化测试,从实体框架中获取列表并序列化,然后反序列化,并在序列化之前和之后进行比较

使用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);
// ... //

我也有同样的问题。多亏了Brice2Paris,我通过关闭EF的代理解决了这个问题:

context.Configuration.ProxyCreationEnabled = false;

您是否尝试过调试
GetBooksList()
method?您是否尝试过使用@lazyberezovsky直接与WCF服务通信?@lazyberezovsky是的,如果该方法在控制器中未作为服务调用,则该方法工作正常。@Velouse是的,我已使用WCF测试客户端对其进行了测试,第二种方法测试正常,但第一种方法出现错误。@ElAmorZeewon-您是如何实现的您的服务代理,您能提供一些代码吗?当您使用DataContractSerializer测试序列化时是否出现异常?了解问题是否是序列化问题很重要。您也可以激活WCF跟踪,就像MSDN中的解释:
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;
context.Configuration.ProxyCreationEnabled = false;