【发布时间】:2011-08-10 12:06:39
【问题描述】:
我一直在使用 WCF 和 EF,但在发送集合时遇到了问题。
我正在使用由 2 个解决方案组成的游乐场,这只是我需要通过线路进行交流的最低限度。在两者之间发送字符串可以正常工作,通过客户端在数据库中添加记录也可以正常工作。但是,我的服务公开了以下合同:
[OperationContract]
IEnumerable<Company> GetAllCompanies();
在我的服务中实现,例如:
public IEnumerable<Company> GetAllCompanies()
{
using (var ctx = new InleerAppContext())
{
return ctx.Company.ToList();
}
}
没有什么不寻常的,因为发送对象似乎工作正常,我本来希望这也能工作。 但是,当从我的客户调用 GetAllCompanies() 时:
var result2 = service.GetAllCompanies();
foreach (Company c in result2)
{
Console.WriteLine(c.Name);
}
一个 CommunicationException 被抛出:
接收到的 HTTP 响应时出错 http://localhost:8080/。这可能是由于服务端点 绑定不使用 HTTP 协议。这也可能是由于 HTTP 请求上下文被服务器中止(可能是由于 服务关闭)。有关详细信息,请参阅服务器日志。
更多信息:
在 System.Net.HttpWebRequest.GetResponse()
在 System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(时间跨度 超时)
我已经在客户端和服务器上使用自定义绑定配置(双方都是 basicHttpBinding)将超时时间更改为 30 分钟:
<bindings>
<basicHttpBinding>
<binding name="longTimeoutBasicHttpBinding"
receiveTimeout="00:30:00"
sendTimeout="00:30:00">
</binding>
</basicHttpBinding>
</bindings>
我在这里缺少什么?
【问题讨论】:
-
如果您返回单一公司会怎样?公司有导航属性吗?公司是否包含在动态代理中?你在使用延迟加载吗?
-
您能发送配置的端点信息吗?
-
顺便说一句。如果您在服务上设置WCF tracing,您应该能够看到异常详细信息。
-
@Ladislav:同一家公司也会发生同样的情况。它上面有一个导航属性,它也包含在 DynamicProxy 中,看起来如此。延迟加载已启用。当我“包含”导航属性时,问题仍然存在。阅读 WCF 跟踪 atm...
标签: c# wcf entity-framework-4 client communicationexception