在服务器调用后,我的客户端使用以下消息捕获异常
“服务器没有提供有意义的回复;这可能是由于合同不匹配,过早的会话关闭或内部服务器错误造成的。”
另外,请注意我在WCF "The server did not provide a meaningful reply"中尝试了配置 但仍然没有用。
请注意,我将服务调试到最后,并且数据已成功填充,但在数据应该出现时在客户端,它只是因为提到的异常而崩溃。
任何帮助表示感谢。
答案 0 :(得分:3)
我弄清楚这背后的原因是为枚举类型错误地生成了代理,它是作为字符串生成的,所以它失败了并且让我出了那个异常
答案 1 :(得分:3)
如果有其他人遇到同样的异常,调试到服务器端的相同行为,但在返回客户端时获得异常,另一个可能的原因是返回数据合同中未初始化的枚举,其中枚举具有显式值,但没有明确的零值。
[ServiceContract]
public interfact IMyService
{
[OperationContract]
MyResult DoSomething();
}
[DataContract]
public class MyResult
{
[DataMember]
public OperationStatus Status {get; set;}
[DataMember]
public string ErrorText {get; set;}
}
[DataContract]
public enum Operation Status
{
[EnumMember]
Success = 1,
[EnumMember]
Failure = 2
}
public class MyService : IMyService
{
public MyResult DoSomething()
{
var result = new MyResult();
// ... do work, but don't set any properties on result ...
return result;
}
}
在这种情况下发生错误的原因是result.Status默认为零,但数据协定没有提供任何序列化它的方法,因为它不是明确定义的枚举值之一。
解决方案(假设您确实需要具有显式整数值的枚举)是在返回对象中设置枚举值,或者提供默认(零)值。
[DataContract]
public enum Operation Status
{
[EnumMember]
Unknown = 0,
[EnumMember]
Success = 1,
[EnumMember]
Failure = 2
}
- 比尔
答案 2 :(得分:2)
如果您的Web服务返回DataTable,它必须具有TableName; 看看https://stackoverflow.com/a/5894732/775811
答案 3 :(得分:0)
对我来说这个错误的原因是服务器功能界面(标有OperationContract属性的那个)上缺少 FaultContractAttribute (typeof(FaultModel))。
FaultException<在客户端抛出的服务器端抛出了FaultModel>() - CommunicationException :“服务器没有提供有意义的回复,这可能是由于合同不匹配造成的,过早的会话关闭或内部服务器错误。“。
希望能帮助别人。答案 4 :(得分:0)
在尝试调用Windows Workflow服务后,这在新系统(Windows 10)上发生了。其他WCF服务调用正在工作,但是尝试调用工作流活动(xamlx WF4服务)时收到此错误。
尝试浏览到service.xamlx
文件会导致黑屏。最终使我想到了另一个答案(特定于IIS8的答案),该答案是在IIS服务下添加HTTP激活功能: