zoukankan      html  css  js  c++  java
  • .NET : 在实现WCF的双工服务时可能遇到的问题

    今天继续在讲WCF方面的课程。期间演示双工服务的时候,总是遇到超时的问题,代码怎么看都是正确的,硬是没有找到原因。回到酒店,再次打开确又是正常的。总结下来,原因应该是我在IE中设置了连接代理的原因。

    image

    1. 合约

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    using System.ServiceModel;
    
    namespace Contracts
    {
        [
            ServiceContract(
                CallbackContract=typeof(ICallbackContract))
        ]
        public interface IChat
        {
            [OperationContract]
            void SendMessage(string msg);
        }
    
        [ServiceContract]
        public interface ICallbackContract {
            [OperationContract]
            void ReplyMessage(string msg);
        }
    }
    

    2. 服务

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    using System.ServiceModel;
    using Contracts;
    
    namespace HelloWorldServiceLib
    {
        [ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Reentrant)]
        public class ChatService:IChat
        {
            #region IChat 成员
    
            public void SendMessage(string msg)
            {
                Console.WriteLine("时间:{0},收到消息:{1}",
                    DateTime.Now.ToString(),
                    msg);
    
                ICallbackContract callback = OperationContext.Current.GetCallbackChannel<ICallbackContract>();
    
                callback.ReplyMessage("服务器回复消息:我已收到"+msg);
    
            }
    
            #endregion
        }
    }
    
    3. 宿主
             using (ServiceHost host =
                    new ServiceHost(
                        typeof(HelloWorldServiceLib.ChatService),
                        new Uri("http://localhost:8000/ChatRoom")
                        )) {
                            host.AddServiceEndpoint(
                                "Contracts.IChat",
                                new WSDualHttpBinding(),
                                "");
                            host.Open();
                            Console.WriteLine("聊天室已经准备好");
                            Console.Read();
                }

    4. 客户端

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    using System.ServiceModel;
    using Contracts;
    using System.ServiceModel.Channels;
    
    namespace ChatClient
    {
        class Program
        {
            static void Main(string[] args)
            {
                Binding binding = new WSDualHttpBinding();
                EndpointAddress address = new EndpointAddress("http://localhost:8000/ChatRoom");
                CallBackHandler callback = new CallBackHandler();
    
                ChatClient client = new ChatClient(
                    new InstanceContext(callback),
                    binding,
                    address);
    
                client.SendMessage("Hello,World");
                
                Console.Read();
    
            }
        }
    
    
        class ChatClient : ClientBase<IChat>, IChat {
    
            public ChatClient(InstanceContext callback,Binding binding, EndpointAddress address) : base(callback,binding, address) { }
    
            #region IChatContract 成员
    
            public void SendMessage(string message)
            {
                Channel.SendMessage(message);
            }
    
            #endregion
        }
    
        class CallBackHandler : ICallbackContract {
    
            #region ICallbackContract 成员
    
            public void ReplyMessage(string msg)
            {
                Console.WriteLine(msg);
            }
    
            #endregion
        }
    }
    

    效果如下

    1. 服务器初始化

    image

    2. 服务器收到消息

    image

    3. 客户端收到消息

    image

  • 相关阅读:
    unity 判断是安卓还是IOS平台
    C# set get 函数 属性访问器
    C# 字典 Dictionary
    掌握下面常用函数,学PHP不再难!
    阿里云云虚拟主机上个人网站的Https访问配置
    PHP中$_SERVER 参数详解,PHP判断当前访问的http还是https
    个人网站如何选择支付接口(API回调)
    备战NOIP——模板复习8
    备战NOIP——模板复习7
    备战NOIP——模板复习7
  • 原文地址:https://www.cnblogs.com/chenxizhang/p/1621299.html
Copyright © 2011-2022 走看看