WCF捕获异常“服务器没有提供有意义的回复..”

时间:2011-04-26 16:39:01

标签: wcf

在服务器调用后,我的客户端使用以下消息捕获异常

  
    

“服务器没有提供有意义的回复;这可能是由于合同不匹配,过早的会话关闭或内部服务器错误造成的。”

  

另外,请注意我在WCF "The server did not provide a meaningful reply"中尝试了配置 但仍然没有用。

请注意,我将服务调试到最后,并且数据已成功填充,但在数据应该出现时在客户端,它只是因为提到的异常而崩溃。

任何帮助表示感谢。

5 个答案:

答案 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激活功能:

WCF on IIS8; *.svc handler mapping doesn't work