单向运营合同更快吗?

时间:2015-01-07 07:31:52

标签: c# wcf

这是一个非常棒的问题。我想知道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
            }
            );
}

1 个答案:

答案 0 :(得分:3)

它本身并不快,它是不同的。

单向通话是一种方式。你发送消息就是这样。这是火与难忘的。如果在服务中抛出异常,例如无法打开数据库,您将永远不会知道。一旦消息传递到服务,呼叫将立即返回。它不会等到服务电话完成。

如果您想等到服务通话完成以确保没有错误,则必须使用正常的非单向方法。