C# WCF-IsOneway的行为不像是单向操作

C# WCF-IsOneway的行为不像是单向操作,c#,wcf,C#,Wcf,我已经在我的服务的一些方法上定义了单向属性,但它们的行为不像单向调用。我的客户机等待呼叫完成并从服务返回。我假设单向操作是非阻塞操作,客户机不关心被调用函数会发生什么。它只是打电话忘记了。对吗 问题: 调用OperationContract2后,我立即关闭代理,但我的客户端等待执行完成 if (((ICommunicationObject)myServices).State == CommunicationState.Opened) { ((ICommun

我已经在我的服务的一些方法上定义了单向属性,但它们的行为不像单向调用。我的客户机等待呼叫完成并从服务返回。我假设单向操作是非阻塞操作,客户机不关心被调用函数会发生什么。它只是打电话忘记了。对吗

问题: 调用OperationContract2后,我立即关闭代理,但我的客户端等待执行完成

    if (((ICommunicationObject)myServices).State == CommunicationState.Opened)
        {
        ((ICommunicationObject)myServices).Close();
        }
配置有什么问题吗

服务器配置:

  <netTcpBinding>
    <binding name="GoCustomBinding" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="0" maxReceivedMessageSize="2147483647">
    </binding>
  </netTcpBinding>

服务合同:

[ServiceContract]
public interface IMyServices
{
    [OperationContract(IsOneWay = true, Action = "*")]
    void OPeration1(List<int> someIds);

    [OperationContract(IsOneWay = true)]
    void OPeration2(SomeClass p1);

}
[服务合同]
公共接口IMyServices
{
[运营合同(IsOneWay=true,Action=“*”)]
无效操作1(列出某些ID);
[运营合同(IsOneWay=true)]
无效操作2(某些类别p1);
}
客户端代理:

[ServiceContract]
public interface IMyServices
{
    [OperationContract(IsOneWay = true, Action = "*")]
    void Operation1(List<int> someIds);

    [OperationContract(IsOneWay = true)]
    void Operation2(SomeClass p1);
}

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class ServiceClient : ClientBase<IMyServices>, IMyServices
{
    public void ScheduleOptimization(List<int> someIds)
    {
        Channel.Operation1(routeID);
    }

    public void Operation1(SomeClass p1)
    {
        Channel.Operation2(pasDataMsg);
    }
}
[服务合同]
公共接口IMyServices
{
[运营合同(IsOneWay=true,Action=“*”)]
无效操作1(列出某些ID);
[运营合同(IsOneWay=true)]
无效操作2(某些类别p1);
}
[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerCall)]
公共类ServiceClient:ClientBase,IMyServices
{
公共void调度优化(列出someid)
{
信道操作1(路由ID);
}
公共无效操作1(某些类别p1)
{
信道操作2(PASDATAMG);
}
}
来自:

指定操作为单向操作仅意味着 没有响应消息。如果存在连接,则可能会阻塞 无法生成,或者出站消息非常大,或者 服务无法足够快地读取入站信息。如果客户 需要非阻塞调用,生成异步模式操作。对于 有关详细信息,请参见单向服务和使用 客户


这些可能是您的问题吗?

ConcurrencyMode设置为ConcurrencyMode。Multiple和InstanceContextMode设置为InstanceContextMode.PerCall。我想我可能必须实现异步模式。你有什么指针吗?还有一点是,这是一个无效的操作,为什么还要麻烦返回一些东西呢?所以我将我的方法标记为AsyncPattern=true,返回类型的操作2现在是IAsyncResult。我应该返回什么?第二条评论:问题不是返回(因为不会返回)。问题是实际通话所需的时间。方法的调用正在同步进行,客户端代码正在等待,直到调用完成;我认为这意味着建立连接和将消息传送到线路上的所有开销。请看一下这些实现异步模式的方法: