使用AutoMapper,我找到了一个命名参数非常适合的地方:
.ForMember(s => s.MyProperty, opt => opt.MapFrom(s => BuildMyProperty(s, isAdvanced: false)))
Run Code Online (Sandbox Code Playgroud)
但编译器对我大吼:
表达式树可能不包含命名参数规范
所以我不得不回复:
.ForMember(s => s.MyProperty, opt => opt.MapFrom(s => BuildMyProperty(s, false)))
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么编译器在这种情况下不允许使用命名参数?
我们有一个WCF服务,可以进行大量的事务NHibernate调用.偶尔我们看到SQL超时,即使调用更新了不同的行,并且表被设置为行级锁定.
在深入研究日志之后,看起来不同的线程正在进入代码中的相同点(我们的事务使用块),并且更新挂起在提交上.但是,它没有意义,因为我们认为以下服务类属性强制每个服务调用一个唯一的执行线程:
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, InstanceContextMode = InstanceContextMode.PerCall)]
Run Code Online (Sandbox Code Playgroud)
我们最近将并发模式改为ConcurrencyMode.Single并且还没有遇到任何问题,但是这个错误非常难以重现(如果有人有任何关于刷出这样的错误的想法,请告诉我!).
无论如何,这一切都让我想到了问题:PerCall的InstanceContextMode是否应该在服务中强制执行线程安全,即使ConcurrencyMode设置为多个?如何通过同一个服务实例为两个调用提供服务?
谢谢!
我目前正在开发一个WCF服务,该服务可以通过其他服务在一些操作中提交信息.第二个服务的代理是通过强类型ProxyFactory<T>类生成的.我没有遇到任何问题,但听到我在拨打电话时应该执行以下操作:
using (new OperationContextScope((IContextChannel)_service))
_service.Send(message);
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:什么时候创建这个新的OperationContextScope合适的,为什么?
谢谢!
因此,在将WCF服务代理代码放入Visual Studio中的项目时,似乎有几个主要选项:
使用Visual Studio的内置工具进行服务引用
使用一个简单的svcutil命令,例如svcutil http://[my
endpoint] /namespace:[my namespace] /noconfig(因为我在项目中使用了一些相当标准的绑定),并将生成的文件拖到我的项目中(或就地升级).
要明确的是,选项2感觉就像最好的一样,没有用于更新的内置工具.但是"服务引用"对话框生成的文件非常多. 我缺少的VS服务参考是否有任何模糊的好处?
在干净的Windows重新格式化并安装Visual Studio 2013之后,尝试使用数据库优先的Entity Framework edmx文件构建项目会产生以下错误:
无法从程序集C:\ Program Files(x86)\ MSBuild\12.0\bin\Microsoft.Data.Entity.Build.Tasks.dll加载"EntityDeploySplit"任务.无法加载文件或程序集'file:/// C:\ Program Files(x86)\ MSBuild\12.0\bin\Microsoft.Data.Entity.Build.Tasks.dll'或其依赖项之一.该系统找不到指定的文件.确认声明是否正确,程序集及其所有依赖项是否可用,以及该任务是否包含实现Microsoft.Build.Framework.ITask的公共类.
有没有办法单独安装?默认情况下,此程序集包含什么内容?
更新:这在查找EntityClean任务时也会显示出来.我倾向于认为它首先检查bin,因为另一个运行它的开发人员尝试了干净/重建然后开始出现.
我正在尝试使用Microsoft的Web优化框架呈现JavaScript包,如下所示:
@Scripts.Render("~/assets/bundle.js")
Run Code Online (Sandbox Code Playgroud)
并建立一个小包,像这样:
public static void RegisterBundles(BundleCollection bundles)
{
bundles.Add(new ScriptBundle("~/assets/bundle.js")
.Include(
"~/scripts/jquery-2.1.0.min.js",
"~/scripts/somescript.js"
));
...
}
Run Code Online (Sandbox Code Playgroud)
但是当启用优化时,它只会呈现相对URL,如下所示:
<script src="/assets/bundle.js?v=mGDOiNaiTrSfcNq41OoA7A_BcN8PrXuMbfl-TE84HVY1"></script>
Run Code Online (Sandbox Code Playgroud)
如何让脚本捆绑呈现绝对URL呢? 我找不到一种方法来查看MSDN上的文档.这是我最终会喜欢的:
<script src="http://my.site.com/assets/bundle.js?v=mGDOiNaiTrSfcNq41OoA7A_BcN8PrXuMbfl-TE84HVY1"></script>
Run Code Online (Sandbox Code Playgroud)
这是在框架中,还是我必须使用辅助方法Script.Url?
我正在运行一套使用的集成测试System.Net.HttpClient.这些测试中的大多数"行为"部分都使用这种通用格式:
// Arrange
// Do some stuff
// Act
var download = _client
.GetStringAsync(testUrl)
.Result;
// Assert
// Does "download" contain what I expected?
Run Code Online (Sandbox Code Playgroud)
但是,间歇性地运行这些测试会产生如下所示:
System.AggregateException : One or more errors occurred.
----> System.Threading.Tasks.TaskCanceledException : A task was canceled.
at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
at System.Threading.Tasks.Task`1.get_Result()
Run Code Online (Sandbox Code Playgroud)
我意识到使用HttpClient是用于启动异步的东西,并不适合我们总是告诉它等待的集成测试场景.所以这引出了两个有些相关的问题:
HttpWebRequest/ HttpWebResponse更适合此方案?HttpClient,处理异常启动的请求错误的最佳方法是什么?假设我有以下实体:
public class CalculationInfo
{
public virtual Int64 Id { get; set; }
public virtual decimal Amount { get; set; }
public virtual decimal SomeVariable { get; set; }
public virtual decimal SomeOtherVariable { get; set; }
public virtual decimal CalculatedAmount
{
get
{
decimal result;
// do crazy stuff with Amount, SomeVariable and SomeOtherVariable
return result;
}
}
}
Run Code Online (Sandbox Code Playgroud)
基本上我想用NHibernate读取和写入我的数据库的所有字段,除了CalculatedAmount,我只是想写,而不是回读.
每个类似的问题和相应的答案都涉及为值指定一个后备存储,我在这种情况下不会有.
如何使用Fluent NHibernate完成此操作?
谢谢!
更新: 这是我尝试过的,以及它导致的错误:
这是我对该物业的映射......
Map(x => x.CalculatedAmount)
.ReadOnly();
Run Code Online (Sandbox Code Playgroud)
它产生的例外......
无法在类'xxx.CalculationInfo'中找到属性'CalculatedAmount'的setter
我最近提出了一个问题在这里对堆栈溢出关于发现的模型在Web APIβ结合正确的扩展点.使用自定义提供程序/可以IModelBinder完全控制模型绑定和对值提供程序的访问.
然而,这真的是太多的控制.我只是想控制几个值的映射方式,并且不想手动编写模型绑定,否则它们会正常工作.
最终,这是我希望能够做到的:
public class MyCustomModelBinder : IModelBinder
{
public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext)
{
// Invoke default model binding
// Pull out custom values
var value1 = bindingContext.ValueProvider.GetValue("value1");
var value2 = bindingContext.ValueProvider.GetValue("value2");
bindingContext.Model.Value1 = DoCustomStuff(value1);
bindingContext.Model.Value2 = DoCustomStuff(value2);
return true;
}
... // Define DoCustomStuff
}
Run Code Online (Sandbox Code Playgroud)
看起来很难获得WebAPI的默认提供程序. 有谁知道它是否可访问以及如何在自定义模型绑定器中访问它?
我一直在使用MVC4测试版,目前正在努力升级到最近发布的RC版本.
似乎模型绑定复杂请求类型已经改变,但我无法弄清楚我是怎么做错的.
例如,假设我有以下API控制器:
public class HomeApiController : ApiController
{
public TestModel Get()
{
return new TestModel
{
Id = int.MaxValue,
Description = "TestDescription",
Time = DateTime.Now
};
}
}
Run Code Online (Sandbox Code Playgroud)
这产生了预期的结果:
<TestModel xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/xxxx">
<Description>TestDescription</Description>
<Id>2147483647</Id>
<Time>2012-06-07T10:30:01.459147-04:00</Time>
</TestModel>
Run Code Online (Sandbox Code Playgroud)
现在说我只是更改签名,接受请求类型,如下所示:
public TestModel Get(TestRequestModel request)
{
...
public class TestRequestModel
{
public int? SomeParameter { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我现在收到以下错误:
<Exception xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/System.Web.Http.Dispatcher">
<ExceptionType>System.InvalidOperationException</ExceptionType>
<Message>
No MediaTypeFormatter is available to read an object of type 'TestRequestModel' from content with media type ''undefined''. …Run Code Online (Sandbox Code Playgroud) c# ×4
wcf ×3
nhibernate ×2
asp.net ×1
asp.net-mvc ×1
asynchronous ×1
c#-4.0 ×1
scriptbundle ×1
service ×1
transactions ×1
unit-testing ×1