我已在服务的某些方法上定义了 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);
}
}
来自该属性的文档 http://msdn.microsoft.com/en-us/library/system.servicemodel.operationcontractattribute.isoneway.aspx:
指定操作是单向操作仅意味着
没有回复消息。如果连接有可能被阻塞
无法发送,或者出站消息非常大,或者如果
服务无法足够快地读取入站信息。如果一个客户
需要非阻塞调用,生成AsyncPattern操作。为了
有关更多信息,请参阅单向服务和使用
客户。
这些可能是您的问题吗?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)