我已经在我的服务的一些方法上定义了OneWay属性,但它们的行为并不像单向调用那样。我的客户端等待调用完成并从服务返回。我假设Oneway操作是非阻塞操作,客户端并不关心调用的函数发生了什么。它只会呼唤并忘记它。这是正确的吗?
问题:在调用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);
}客户端代理:
[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);
}
}发布于 2011-07-13 22:25:04
从documentation for that attribute
指定操作是单向操作的
只表示没有响应消息。如果无法建立连接,或者出站消息非常大,或者服务无法足够快地读取入站信息,则可能会阻塞。如果客户端需要非阻塞调用,则生成AsyncPattern操作。有关更多信息,请参见单向服务和使用客户端的使用服务。
这些都会是你的问题吗?
https://stackoverflow.com/questions/6680411
复制相似问题