当前位置:编程学习 > C#/ASP.NET >>

wcf双工通信问题?

wcf服务器端:binding="netTcpBinding"
[ServiceContract(CallbackContract = typeof(ICallBack))]
    public interface ISinterface
    {
        [OperationContract(IsOneWay = true)]
        void Init();

        [OperationContract]
        
        String DoWork(string flg, string[] message, int n);
    }
wcf客户端:

 ServiceReference1.NMSinterfaceClient proxy = new ServiceReference1.NMSinterfaceClient(instanceContext, "NetTcpBinding_ISinterface");

加入CallbackContract之后服务引用问什么都必须带参数了?

因为我用到的函数比较多,有很多不需要服务器端回调,像DoWork()就不需要,要怎么设置在在客户端的引用不要带参数?
ServiceReference1.NMSinterfaceClient proxy = new ServiceReference1.NMSinterfaceClient();
这样就够了。

因为程序代码很多,只贴了要说的,不知道能明白我的意思不,在此谢过。。。 --------------------编程问答-------------------- 没研究过,我双工了都是带

new instanceContext(new CallBack())

这个参数的,为什么不想要这个参数了?有什么问题吗? --------------------编程问答-------------------- 项目刚开始做的时候不需要服务器的回调,可最后有个数据要服务器主动的发到客户端,所以加了回调,但绑定了双工协议之后,加了CallbackContract,服务器端可以主动向客户端发送信息,可是原来写的程序不需要回调,都是
ServiceReference1.NMSinterfaceClient proxy = new ServiceReference1.NMSinterfaceClient();
这种形式的,要怎么做才能只让那一个需要回调的后面带参那,客户端服务引用自动添加之后,生成的都是带有参数的。要怎么改下那?

我编程是从做这个项目才开始学的,wcf也刚刚接触,可能术语的表达上不是很清楚,如果有知道的,感觉我没说明白可以说下,谢谢了。。。 --------------------编程问答--------------------
引用 1 楼 jycrystal2002 的回复:
没研究过,我双工了都是带

C# code

new instanceContext(new CallBack())

这个参数的,为什么不想要这个参数了?有什么问题吗?
up --------------------编程问答-------------------- --------------------编程问答-------------------- ps:

      InstanceContext instanceContext = new InstanceContext(new CalculateCallBack());
                       ServiceReference1.NMSinterfaceClient proxy = new ServiceReference1.NMSinterfaceClient(instanceContext, "NetTcpBinding_INMSinterface"); --------------------编程问答--------------------
      InstanceContext instanceContext = new InstanceContext(new CalculateCallBack());
                       ServiceReference1.NMSinterfaceClient proxy = new ServiceReference1.NMSinterfaceClient(instanceContext, "NetTcpBinding_INMSinterface");
--------------------编程问答-------------------- mark,學習~ --------------------编程问答-------------------- http://developer.51cto.com/art/201002/184763.htm --------------------编程问答-------------------- --------------------编程问答-------------------- 好好学习 天天上线 --------------------编程问答-------------------- 你刚从项目开始学习,就接触这么深的东西呀~`佩服 --------------------编程问答-------------------- WCF中实现双工通信  --------------------编程问答-------------------- 带不带参数是你自己定义的


[OperationContract]   
String DoWork();

这样的话就不带参数了
--------------------编程问答--------------------
引用 13 楼 jzywh 的回复:
带不带参数是你自己定义的


[OperationContract]  
String DoWork();

这样的话就不带参数了


可能是我说的不清楚,我不是说的这个不带参,而是这:
ServiceReference1.NMSinterfaceClient proxy = new ServiceReference1.NMSinterfaceClient(instanceContext, "NetTcpBinding_INMSinterface");
ServiceReference1.NMSinterfaceClient proxy = new ServiceReference1.NMSinterfaceClient();
因为刚开做的时候客户端添加引用自动生成的函数中是第二种,当添加了回调之后,这里的引用都必要用第一种,我想怎么样可以用第二种让他不带参,需要在哪设置。。。 --------------------编程问答--------------------
引用 12 楼 wuyq11 的回复:
WCF中实现双工通信


谢谢。。这个我看过了,现在我已经能够在服务器端主动调用客户端,但是我现在要做的是一个程序中只有一个需要服务器调用客户端,其他的都不用,就是这个地方:
 InstanceContext instanceContext = new InstanceContext(new CalculateCallback());  11:             using(DuplexChannelFactory<ICalculator> channelFactory = new  DuplexChannelFactory<ICalculator>(instanceContext,"CalculatorService"))

不需要回调的用不到instanceContext,"CalculatorService”这两参数,怎样设置可以省去他们,因为以前写的程序都是无参的。。。 --------------------编程问答-------------------- 还没有用过3.5框架的东西。 --------------------编程问答-------------------- 网络的都直接用socket简单实用。 --------------------编程问答-------------------- 顶一下. 我也遇到这个问题!!!! --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 你是说你不想传instanceContext这个参数? instanceContext 这个参数是必需的! --------------------编程问答-------------------- 很好。。。 --------------------编程问答--------------------
引用 22 楼 jzywh 的回复:
你是说你不想传instanceContext这个参数? instanceContext 这个参数是必需的!


是的,就是因为加了回调之后,所有的都要有这两个参数,但其他的根本不用的。。。
我就要想看怎么可以不用,如果把其他的都加上这两个参数,是多余,而且繁琐了不少。。 --------------------编程问答-------------------- 学习一下。。。。。。。 --------------------编程问答-------------------- 你可以做一个Factory, 所有的创建client实例的代码都调用Factory的方法
public static class SerivceClientFactory
{
    public static NMSinterfaceClient CreateClient()
    {
        .....
        return new ServiceReference1.NMSinterfaceClient(instanceContext, "NetTcpBinding_INMSinterface");
    }
} --------------------编程问答--------------------
引用 26 楼 jzywh 的回复:
你可以做一个Factory, 所有的创建client实例的代码都调用Factory的方法
public static class SerivceClientFactory
{
  public static NMSinterfaceClient CreateClient()
  {
  .....
  return new ServiceReference1.NMSinterfaceC……


没怎么看懂那,没有其他方法了吗?
把ServiceContract分开不行吗?。。。 --------------------编程问答-------------------- 实在不行就只能加一个ServiceContract了吧,再添加一个终结点,用双工的就用这个,原来那些就不动了,其他方面就不懂了,WCF只是略懂略懂啊,这样做感觉上很不好似的 --------------------编程问答-------------------- 再问一句,你以前的WCF调用都是随时用随时调的?不是用的一个全局? --------------------编程问答--------------------
引用 28 楼 jycrystal2002 的回复:
实在不行就只能加一个ServiceContract了吧,再添加一个终结点,用双工的就用这个,原来那些就不动了,其他方面就不懂了,WCF只是略懂略懂啊,这样做感觉上很不好似的

我试着分过,可配置文件里的contract搞不赢,总是有问题,以前的wcf都是客户端给服务器发请求调用的。是现在要加上这个服务器主动给客户端发信息的。。。 --------------------编程问答-------------------- 你可以在你的ICallback接口里的那个方法名的operationcontract加个isoneway = true,然后再更新下服务试试。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,