这是一个非常棒的问题。我想知道WCF的单向合约是否比返回结果的对应方更快。例如是
[OperationContract(IsOneWay=true)]
[WebGet(UriTemplate = "/SendData/{data}", BodyStyle = WebMessageBodyStyle.WrappedResponse,
RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
void SendData(string data)
比
快[OperationContract(IsOneWay=false)]
[WebGet(UriTemplate="/SendData/{data}", BodyStyle = WebMessageBodyStyle.WrappedResponse,
RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
bool SendData(string data)
方法SendData就像这样,有很多数据库代码和锁定
bool SendData(string data)
{
check if data is valid
if(data is valid)
{
lock(a database table)
{
search duplicate data
if(duplicate data found)
{
does not do anything (no-op)
}
else
{
save a data to the table
}
return true;
}
}
else
{
return false;
}
}
正如你可以看到方法bool SendData(字符串数据),有很多数据库和锁定代码。问题的关键是我应该将操作契约更改为一种方式,以便在不改变的情况下使用相同的代码获得更快的结果any.Or我的SendData方法应该如下所示,以更快地返回方法
void SendData(string data)
{
Task.Factory.StartNew(() =>
{
Do Task
}
);
}
答案 0 :(得分:3)
它本身并不快,它是不同的。
单向通话是一种方式。你发送消息就是这样。这是火与难忘的。如果在服务中抛出异常,例如无法打开数据库,您将永远不会知道。一旦消息传递到服务,呼叫将立即返回。它不会等到服务电话完成。
如果您想等到服务通话完成以确保没有错误,则必须使用正常的非单向方法。