wcf在什么情况下会给客户端添加一个带InstanceContext参数的构造函数
我是不懂啊 我现在在做双工通信
看了一个demo他添加的参数 我不知道怎么给wcf添加构造啊。
为什么他的demo就不报错呢

解决方案 »

  1.   

    自动产生的,在Visual Studio里面添加服务引用就能产生,至少这种参数不可能是人为添加的,人为处理都是用接口方式调用。
    PS:你太急躁,做不好事。
      

  2.   

    木有啊亲 var client = new CallBackEntity();
                var ctx = new InstanceContext(client);
                ServiceReference1.Service1Client clients = new ServiceReference1.Service1Client(ctx);
    最后一句报错~~~~(>_<)~~~~ 
      

  3.   

    我看到ServiceReference1这个名字,就知道肯定是自动产生的,绝对不可能是手写出来的。
    自动产生的构造函数有很多,你找个只需要传递终结点的调用啊,终结点就一个url字符串,我因为早不用自动产生的方法来做了,所以具体构造函数的模样也记不清了。使用开放服务端的接口类来创建客户端那才叫爽,那才叫快,代码方式手动产生,既好控制,又容易更新,更新的时候接口类一换,直接OK。
    给你看一段例子,就这么几行代码搞定,需要设置的都可以代码设置,不过具体设置还需要参考服务端的,保持一致性。
    NetTcpBinding binding = new NetTcpBinding() { TransferMode = TransferMode.Buffered, MaxReceivedMessageSize = 2147483647 };
    binding.ReaderQuotas = System.Xml.XmlDictionaryReaderQuotas.Max;
    binding.Security.Mode = SecurityMode.None;
    binding.Security.Transport.ClientCredentialType = TcpClientCredentialType.None;
    binding.Name = "tcpTransport";
    EndpointAddress address = new EndpointAddress(new Uri("net.tcp://" + uri),);
    var channelFactory = new ChannelFactory<IServer>(binding, address);
    channelFactory.Endpoint.Behaviors.Add(new ContextHeaderBehavior());
    var channel = channelFactory.CreateChannel();
    其中IServer就是服务端定义的接口,里面各种WCF方法,返回的channel就是继承IServer接口的,因此可以直接对它调用所有接口方法。
      

  4.   


    这个IServer是双工通信的契约接口还是我创建的wcf服务的接口?
      

  5.   

    没写过双工的实现方式,系统自带的传参看了下,需要传递一个回调对象,另外最好带上EndpointAddress参数,因为你调用的地址不可能正好是默认的,调试和实际部署时,服务端地址会变化。
    那个回调对象必须满足继承回调接口的条件,我不知道你的错误信息是什么,是否是这个回调对象不正确,再或者就是远程地址没找到。
      

  6.   

    非双工的模式你熟练程度如何?我很熟悉WCF,但也没去染指双工,因为那个太容易出问题,而且兼容性很差,性能更差,如果一定要用到双工中的双向通信,我宁可自己写Socket来实现,也绝对不会用WCF,或者用轮询替代都比那个好。你如果是初学WCF,还是别来个大跃进比较好。
      

  7.   


    除了双工  我只会建个WCF 然后写业务逻辑 然后客户端引用 调用
    你说WCF的双工性能低。不知道 前几天老板还因为我写局域网广播用了双工觉得很好呢(据说老板技术很NX)
      

  8.   

    是WCF本身的性能低,如果一般用途足够了,因为使用方便,但是双工的使用就不方便了,操作复杂却又没有高性能,没有好处自然就不会去用它了。要知道,双工的连接维护是麻烦事,你不知道对方何时给你单方面断开连接,还有可能出现单线程死锁,必须包装搜索操作都是异步的,多线程的,不比Socket简单,那我还不如直接Socket操作,维护网络的连通性的开销小很多。