WCF 继承合约和回调合约

Posted

技术标签:

【中文标题】WCF 继承合约和回调合约【英文标题】:WCF Inherit contracts and callback contract 【发布时间】:2013-04-19 17:01:08 【问题描述】:

我有一个测试项目来测试继承合约和回调合约。

更新 1 :我用接口植入更新了所有主题

通过阅读本文:http://codeidol.com/csharp/wcf/Service-Contracts/Contract-Inheritance/#part-16

这是可能的,但是当我尝试它时,它失败了。

class Program
    
        static void Main(string[] args)
        
            ServiceHost Service_IServer = new ServiceHost(new ServiceImplemantation(), new Uri(@"net.tcp://localhost:8080/"));
            Service_IServer.AddServiceEndpoint(typeof(IService), new NetTcpBinding(), "Service");
            Service_IServer.Open();
            ServiceHost Service_I_IP = new ServiceHost(new IPImplemantation(), new Uri(@"net.tcp://localhost:8080/"));
            Service_I_IP.AddServiceEndpoint(typeof(I_IP), new NetTcpBinding(), "Service");
            Service_I_IP.Open();
            Console.ReadLine();
        
    
    [ServiceContract]
    public interface I_IP
    
        [OperationContract]
        string GetIP();
    
    [ServiceContract]
    public interface IService : I_IP
    
        [OperationContract]
        void ImTheServer_Print();
    
    //
    //
    //
    //
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
    public class IPImplemantation : I_IP
    
        public string GetIP()
        
            return "1.2.3.4";
        
    
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
    public class ServiceImplemantation : IPImplemantation, IService
    
        public void ImTheServer_Print()
        
            Console.WriteLine("ImTheServer_Print");
        
    

错误:

位于 'net.tcp://localhost:8080/Service' 的 ChannelDispatcher 与合约 '"I_IP"' 无法打开其 IChannelListener。

【问题讨论】:

我认为您在异常中的答案是正确的:“接口类型不是 ServiceContractAttribute 的 CallbackContract 的目标”。 GetIP 在 I_IP 上定义,而 CallbackContract 引用 IServerCallback。也许不支持继承服务方法?只是预感...... 通过我的谷歌搜索,它是。 ***.com/questions/957116/… 那么你的服务/回调实现呢?是否也实现了I_IP? 不,每个合约都有实现,服务/回调实现继承自 I_IP 实现。我通过这个 guid 编写了我的项目:codeidol.com/csharp/wcf/Service-Contracts/Contract-Inheritance/… 你在***.com/users/1413320/sergey上的帖子你必须已经实现了接口。最后,您的回调应该以我的方式提供此方法 【参考方案1】:

确保将其装饰为OneWay

[OperationContract(IsOneWay = true)]
void GetIP();

【讨论】:

OperationBehavior 仅适用于类,不适用于接口。我的 GetIP 返回 IP。对不起,我错过了。 OperationBehaviorAttribute 只能放在服务类上,不能放在 ServiceContract 接口上。类型“I_IP”的方法“GetIP”违反了这一点。 我删除了operationbehavior @StavAlfi 回调无法按设计返回任何内容。

以上是关于WCF 继承合约和回调合约的主要内容,如果未能解决你的问题,请参考以下文章

区块链开发之Solidity编程基础合约继承抽象合约接口

通学智能合约系列(十六)--合约的继承

通学智能合约系列(十五)--合约的继承

智能合约实战 solidity 语法学习 09 [ 访问函数getter 合约创建 合约对象 合约继承IS ]

智能合约实战 solidity 语法学习 08 [ 访问函数getter 合约创建 合约对象 合约继承IS ]

从 ERC271 合约继承有啥意义?