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

Posted

技术标签:

【中文标题】WCF 捕获异常“服务器没有提供有意义的回复..”【英文标题】:WCF catches exception " The server did not provide a meaningful reply.." 【发布时间】:2011-08-13 04:54:38 【问题描述】:

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

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

另外,请注意我尝试了WCF "The server did not provide a meaningful reply" 中的配置 但还是不行。

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

任何帮助表示赞赏。

【问题讨论】:

您需要提供有关您的服务合同和配置文件的更多信息以获得有意义的帮助。此消息通常表示服务未能在服务配置中设置的默认或自定义超时限制内响应。 【参考方案1】:

我发现了错误为枚举类型生成代理的原因,它是作为字符串生成的,所以它失败并给了我这个异常

【讨论】:

【参考方案2】:

如果其他人遇到同样的异常,在服务器端调试到最后的行为相同,但在返回到客户端时得到异常,另一个可能的原因是返回数据协定中未初始化的枚举,其中enum 有明确的值,但没有明确的零值。

[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

--比尔

【讨论】:

您的回答提示我检查我的枚举,看看是否有任何未分配为零。果然,其中一个只有 1 和 2 的值。分配了一个名为 Unknown 的成员并将其设置为零,它解决了我的问题。非常感谢【参考方案3】:

如果您的 Web 服务返回一个 DataTable,它必须有 TableName; 看https://***.com/a/5894732/775811

【讨论】:

【参考方案4】:

对我来说,此错误的原因是服务器函数接口(标有 OperationContract 属性的接口)上缺少 FaultContractAttribute(typeof(FaultModel))。

FaultException() 在服务器端抛出时,客户端正在抛出 - CommunicationException:“服务器没有提供有意义的回复,这可能由合约不匹配、会话过早关闭或内部服务器错误引起。”。

希望能帮助别人。

【讨论】:

【参考方案5】:

在尝试调用 Windows 工作流服务后,我在新系统 (Windows 10) 上发生了这种情况。其他 WCF 服务调用正常,但尝试调用工作流活动(xamlx WF4 服务)收到此错误。

尝试浏览到service.xamlx 文件导致出现空白屏幕。这最终导致我得到另一个答案(IIS8 特定答案),即在 IIS 服务下添加 HTTP 激活功能:

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

【讨论】:

以上是关于WCF 捕获异常“服务器没有提供有意义的回复..”的主要内容,如果未能解决你的问题,请参考以下文章

WCF 捕获异步异常

Dynamics CRM 2011 过滤从 Web 服务返回的数据

调用 WCF 服务时如何在 WPF 中捕获异常

WCF Web 服务调用 - 要捕获哪些异常?

WCF 的 Completed 事件中的异常处理

WCF 异常记录