我面临以下问题:
我需要从我的控制器调用到我的域层;它调用一个web服务方法,该方法接受引用请求(ref)。
控制器代码:
//BusinessEntityObject is a Reference-Type (BusinessEntity) object
var request = View.BusinessEntityObject;
_workflowService.PerformAction(request);
if(request.Errors.Count != 0)
{
View.Errors = request.Errors;
return false;
}域层(WorkflowService.cs类):
public void PerformAction(BusinessEntity request)
{
//TryAction(System.Action action) basically wraps action in try catch and handles exceptions
TryAction(() =>
{
_wcfClient.RequestSomething(ref request);
});
}如果_wcfClient.RequestSomething在返回时修改了错误集合,则请求对象具有此错误更新错误集合。但是,一旦控件返回给控制器&检查了错误集合,那么我的更新就消失了。
Edit00:噢,还有无耻的塞子,我在rep 14,我试着增加一堆对我有用的问题/答案,它说我不能因为我的水平很低。
编辑01:非常感谢迪伦,看到有这样一个网站总是好的,指出一个人可能会错过的非常小的事情。将值返回给我的更新代码如下:
域层(WorkflowService.cs类):
public BusinessEntity PerformAction(BusinessEntity request)
{
//TryAction(System.Action action) basically wraps action in try catch and handles exceptions
TryAction(() =>
{
_wcfClient.RequestSomething(ref request);
return request;
});
}发布于 2011-10-28 00:36:30
当您将一个对象传递到WCF服务时,它将被序列化,通过连线发送,然后在服务器上反序列化。在这种情况下,传递"by ref“不会改变任何事情,如果服务器对其进行更改,则不会将其发送回调用方。只有WCF调用的返回值被序列化并发回。
我建议,如果您需要WCF服务返回任何数据,则将其打包到返回值中。
发布于 2011-10-28 01:24:10
在您的ref方法中缺少一个PerformAction修饰符。
public void PerformAction(ref BusinessEntity request)
{
TryAction(() => _wcfClient.RequestSomething(ref request));
}但是,进行此更改将阻止您的代码编译。您将得到以下错误:
不能在匿名方法、lambda表达式或查询表达式中使用ref或out参数“请求”。
你必须这样做才能让它发挥作用:
public void PerformAction(ref BusinessEntity request)
{
var r = request;
TryAction(() => _wcfClient.RequestSomething(ref r));
request = r;
}所有的一切,似乎有点松散,通过参考传递请求。最好返回一个新的(或相同的)实例,并在外部进行赋值。
https://stackoverflow.com/questions/7923960
复制相似问题