One Way Operation Contract 更快吗?
Is One Way Operation Contract faster?
这是一个非常菜鸟的问题。我想知道 WCF 的单向合同是否比 return result.For 示例
的对应方更快
[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(string data),有很多数据库和锁定 code.The 问题的要点是我是否应该将操作合同更改为一种方式以获得更快的结果没有改变的相同代码 anything.Or 我的 SendData 方法应该像下面这样 return 方法更快
void SendData(string data)
{
Task.Factory.StartNew(() =>
{
Do Task
}
);
}
它本身并没有更快,而是不同。
单向调用是一种方式。您发送消息,仅此而已。即发即弃。如果服务中抛出异常,例如因为无法打开数据库,您将永远不会知道。一旦消息被传递到服务,调用将 return。它不会等到服务调用完成。
如果您想等到服务调用完成后再确认没有错误,则必须使用正常的非单向方法。
这是一个非常菜鸟的问题。我想知道 WCF 的单向合同是否比 return result.For 示例
的对应方更快[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(string data),有很多数据库和锁定 code.The 问题的要点是我是否应该将操作合同更改为一种方式以获得更快的结果没有改变的相同代码 anything.Or 我的 SendData 方法应该像下面这样 return 方法更快
void SendData(string data)
{
Task.Factory.StartNew(() =>
{
Do Task
}
);
}
它本身并没有更快,而是不同。
单向调用是一种方式。您发送消息,仅此而已。即发即弃。如果服务中抛出异常,例如因为无法打开数据库,您将永远不会知道。一旦消息被传递到服务,调用将 return。它不会等到服务调用完成。
如果您想等到服务调用完成后再确认没有错误,则必须使用正常的非单向方法。