我有一个使用WCF服务的应用程序.现在我想将单元测试添加到应用程序中.
在某些情况下,我需要模拟WCF服务,因为从服务中获取所需的行为有时很困难(例如,服务抛出特殊异常).
我可以添加另一个接口到wcf客户端,但这看起来有点傻,因为客户端调用已经在使用接口.
有一种简单的方法来模拟WCF服务吗?比创建另一个接口层并重定向其中的每个WCF调用更容易?
编辑:大多数答案似乎不太了解WCF服务使用,所以一些澄清:
要使用ViewModel的WCF服务,我必须管理这样的连接:
ChannelFactory<IMyWcfService> channelFactory = new ChannelFactory<IMyWcfService>("");
IMyWcfService proxy = channelFactory.CreateChannel();
proxy.CallMyStuff();
proxy.Close();
Run Code Online (Sandbox Code Playgroud)
我不能只将代理的ViewModel传递给WCF,因为需要为每个事务打开和关闭连接.因此,使用RhinoMock/NMock不起作用,因为它们需要一个ViewModel来获取代理作为参数,如果您使用WCF,则不能这样做.
我可以使用DataRowView获取列的值
DataRowView row;
object value = row["MyColumn"];
Run Code Online (Sandbox Code Playgroud)
当然,如果DataRowView中没有"MyColumn",则此代码会抛出异常.
如果该行包含"MyColumn",如何提前检查?可悲的是,DataRowView上没有row.Contains("MyColumn").
Visual Studio 2008为c#提供了两个很棒的功能,称为"使用指令排序"和"删除未使用的指令".
每次使用ctrl + k,ctrl + d格式化代码时,我都想调用"使用指令排序".
或者,更好的是,我希望能够重新格式化项目中的所有c#-source文件,并为所有源文件调用"sort using directives".
我怎样才能做到这一点?手动打开每个cs文件并在每次签入之前键入这些函数是单调乏味的!
c# code-formatting using-directives visual-studio-2008 visual-studio
我有一个包含DependencyProperty(MyProperty)的WPF UserControl.
DependencyProperty绑定到DataContext中的Property.
现在在UserControl中我想更改bound属性的值.但是,如果我指定MyProperty = NewValueBinding丢失并替换为NewValue.
我想要实现的是更改DependencyProperty绑定的DataContext属性.
我如何实现这一点而不是改变绑定?
澄清:使用类似MyTextBox.Text = "0";我将释放绑定的东西.如何设置Text,保持绑定完整,因此绑定的属性也将更改.
我有一个包含绑定到我的ViewModel的东西的FlowDocument,如下所示:
<FlowDocumentReader>
<FlowDocument>
<Paragraph>
<Run Text="{Binding MyTextProperty}"/>
</Paragraph>
</FlowDocument>
</FlowDocumentReader>
Run Code Online (Sandbox Code Playgroud)
现在我想使用某种DataTemplate显示类的List,但不知道如何启动.说我得到了一个类:
public MyClass
{
String Title {get;set;}
String FlowText {get;set;}
}
public List<MyClass> MyList {get;set;}
Run Code Online (Sandbox Code Playgroud)
我想将它绑定到FlowDocument列表,如下所示:
<FlowDocumentReader>
<FlowDocument>
<List Items="{Binding MyList}">
<Bold><Run Text="{Binding Title}"/></Bold>
<LineBreak/>
<Run Text="{Binding FlowText}"/>
</Paragraph>
</FlowDocument>
</FlowDocumentReader>
Run Code Online (Sandbox Code Playgroud)
当然这不起作用 - 但我找不到任何解释如何使用模板绑定FlowDocument中的列表 - 这可能吗?
在我的ASP.NET核心控制器中,我总是检查ModelState是否有效:
[HttpPost("[action]")]
public async Task<IActionResult> DoStuff([FromBody]DoStuffRequest request)
{
if (!ModelState.IsValid)
{
return BadRequest("invalid parameters");
}
else
{
return Ok("some data"));
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法使用过滤器全局检查ModelState的有效性,所以我不必再次在每个控制器的每个API项目中执行此操作?如果动作可以依赖于模型状态是有效的而不需要检查,那将是很好的:
[HttpPost("[action]")]
public async Task<IActionResult> DoStuff([FromBody]DoStuffRequest request)
{
return Ok("some data"));
}
Run Code Online (Sandbox Code Playgroud) 在LinqToSql中,可以很容易地加载行,更改列并将更改提交到数据库:
using (MyDataContext wdc = new MyDataContext())
{
Article article = wdc.Article.First(p => p.ID == id);
article.ItemsInStock = itemsinstock;
wdc.SubmitChanges();
}
Run Code Online (Sandbox Code Playgroud)
唯一的缺点:文章很大.要加载整篇文章,只是为了更新一个列是过度杀戮并显着减慢我的应用程序.
有没有办法使用LINQ更新单个列,而无需加载整行?
现在我恢复使用ExecuteCommand,其中速度至关重要,但这很丑陋且容易出错:
wdc.ExecuteCommand("UPDATE Article SET ItemsInStock = @1 WHERE ID = @2", itemsinstock,id);
Run Code Online (Sandbox Code Playgroud) 我在Windows Phone 7应用程序中有一个包含几个项目的ListBox.我希望用户能够通过触摸并拖动它们(在ListBox模板的左侧部分)对ListBox中的项进行排序.
我该如何实现?在Windows Phone 7上是否有标准的方法或控件来获得这种拖放功能(最好是动画)?
或者是否有一些其他控件/面板比ListBox更好用?
在我的 ASP.NET 核心控制器中,我有以下 HttpGet 函数:
[HttpGet("[action]")]
[HttpHead("[action]")]
[ResponseCache(NoStore = true)]
public async Task<IActionResult> GetProofPdf(long studentid)
{
var rawPdfData = await _studentLogic.StudentPdfAsync(User, studentid);
if (Request.Method.Equals("HEAD"))
{
Response.ContentLength = rawPdfData.Length;
return Json(data: "");
}
else
{
return File(rawPdfData, "application/pdf");
}
}
Run Code Online (Sandbox Code Playgroud)
这确实工作得很好。返回的文件对象可以从浏览器保存。唯一的问题是在 IE 中嵌入 PDF。IE首先发送HEAD请求。HEAD 请求失败,因此 IE 甚至不会尝试获取 PDF。其他浏览器在 HEAD 失败时不会发送 HEAD 或使用 GET,但 IE 不会。
因为我想要支持 IE,所以我想创建一个 HEAD 操作。仅添加[HttpHead("[action]")]到该函数是行不通的,可能是因为对于 HEAD 来说,内容必须为空(“HEAD 方法与 GET 相同,只是服务器不得在响应中返回消息正文。”)。
那么如何在 ASP.NET Core 中创建 HttpHead-Verb-Function?如何返回空内容但返回正确的内容长度?
c# ×5
wpf ×3
.net ×2
asp.net-core ×2
binding ×2
wcf ×2
datarow ×1
flowdocument ×1
http-head ×1
linq ×1
linq-to-sql ×1
mocking ×1
mvvm ×1
performance ×1
unit-testing ×1