WCF - IsOneway的行为与Oneway操作不同

Asd*_*dfg 3 c# wcf

我已经在我的服务的某些方法上定义了OneWay属性,但它们的行为与Oneway调用不同.我的客户端等待呼叫完成并从服务返回.我假设Oneway操作是非阻塞操作,客户端不关心被调用函数会发生什么.它只是召唤并忘记它.这是对的吗?

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

    if (((ICommunicationObject)myServices).State == CommunicationState.Opened)
        {
        ((ICommunicationObject)myServices).Close();
        }
Run Code Online (Sandbox Code Playgroud)

配置有什么问题吗?

服务器配置:

  <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>
Run Code Online (Sandbox Code Playgroud)

服务合约:

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

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

}
Run Code Online (Sandbox Code Playgroud)

客户端代理:

[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);
    }
}
Run Code Online (Sandbox Code Playgroud)

dka*_*man 7

从该属性文档:

指定操作是单向操作仅表示没有响应消息.如果无法建立连接,或者出站消息非常大,或者服务无法足够快地读取入站信息,则可以阻止.如果客户端需要非阻塞调用,请生成AsyncPattern操作.有关更多信息,请参阅使用客户端的单向服务和使用服务.

这些可能是你的问题吗?