【问题标题】:How do I return a reference to an interface from a WCF contract?如何从 WCF 合同返回对接口的引用?
【发布时间】:2009-07-13 22:52:31
【问题描述】:

我有 WCF 服务。我可以毫无问题地返回具体类,但返回对接口的引用会导致以下问题。

发生通信异常 “套接字连接已中止。这可能是由于处理您的消息时出错或远程主机超出接收超时,或底层网络资源问题造成的。本地套接字超时为 '00:00:59.2030000'。”

当我尝试从 WCF 服务获取类的实例时会发生这种情况:

//create the connection
ChannelFactory<IService> _ChannelFactory = new ChannelFactory<IService>(_EndpointName);
IService _ServiceProxy = _ChannelFactory.CreateChannel();

//communication exception thrown here
ITestInterface okcomputer = _ServiceProxy.GetTest();

IService 和 ITestInterface 具有所有正常的 OperationContract 属性等。该服务具有属性:[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]

除此之外,类和接口没有什么特别之处。

我觉得从 WCF 接口返回类接口有一些特殊的技巧,否则我不会遇到这个问题.. 有什么技巧?

【问题讨论】:

    标签: c# .net asp.net wcf


    【解决方案1】:

    你永远不能返回一个接口。怎么序列化?

    接口是关于行为的。行为没有序列化,只有数据。

    【讨论】:

    • 也可以!您的接口的 XML 模式定义是什么? WSDL 是什么样的?它是 Web 服务,那么这个接口是服务契约吗?如果是这样,它有操作。你如何序列化一个操作?
    • 在开发期间,我设计了这个选项,可以换出存根版本以进行调试。如果我用抽象基类或基类和子类组合的引用替换对接口的引用,是否可以实现相同的功能?
    • 你需要一个具体的类。这是客户端将看到的具体类的架构。
    • 真正的面向服务编程与面向对象编程完全不同!你需要再次“忘记”某些原则.....
    • 该死的,我也花了很多精力来学习 OO 最佳实践。这真的把我搞砸了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-11
    相关资源
    最近更新 更多