小编Sam*_*Sam的帖子

模拟WCF服务的简便方法?

我有一个使用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,则不能这样做.

.net wcf unit-testing mocking

9
推荐指数
1
解决办法
9271
查看次数

检查WPF DataRowView是否包含列

我可以使用DataRowView获取列的值

DataRowView row;
object value = row["MyColumn"];
Run Code Online (Sandbox Code Playgroud)

当然,如果DataRowView中没有"MyColumn",则此代码会抛出异常.

如果该行包含"MyColumn",如何提前检查?可悲的是,DataRowView上没有row.Contains("MyColumn").

wpf datarow

9
推荐指数
1
解决办法
7107
查看次数

在保存时自动调用visual studio 2008"使用指令排序"?

Visual Studio 2008为c#提供了两个很棒的功能,称为"使用指令排序"和"删除未使用的指令".

每次使用ctrl + k,ctrl + d格式化代码时,我都想调用"使用指令排序".

或者,更好的是,我希望能够重新格式化项目中的所有c#-source文件,并为所有源文件调用"sort using directives".

我怎样才能做到这一点?手动打开每个cs文件并在每次签入之前键入这些函数是单调乏味的!

c# code-formatting using-directives visual-studio-2008 visual-studio

8
推荐指数
1
解决办法
2537
查看次数

更改绑定值,而不是绑定自身

我有一个包含DependencyProperty(MyProperty)的WPF UserControl.

DependencyProperty绑定到DataContext中的Property.

现在在UserControl中我想更改bound属性的值.但是,如果我指定MyProperty = NewValueBinding丢失并替换为NewValue.

我想要实现的是更改DependencyProperty绑定的DataContext属性.

我如何实现这一点而不是改变绑定?

澄清:使用类似MyTextBox.Text = "0";我将释放绑定的东西.如何设置Text,保持绑定完整,因此绑定的属性也将更改.

c# wpf binding dependency-properties

8
推荐指数
2
解决办法
2897
查看次数

将FlowDocument中的列表绑定到List <MyClass>?

我有一个包含绑定到我的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中的列表 - 这可能吗?

wpf binding mvvm flowdocument

8
推荐指数
1
解决办法
6714
查看次数

为所有控制器全局验证ModelState.IsValid

在我的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)

c# asp.net-core

8
推荐指数
4
解决办法
5353
查看次数

如何更新LINQ中的单个列而不加载整行?

在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)

c# linq performance linq-to-sql

7
推荐指数
2
解决办法
7461
查看次数

在没有svcutil.exe的情况下创建WCF应用程序?

如何在不使用svcutil.exe工具的情况下创建WCF应用程序?

.net wcf

7
推荐指数
2
解决办法
8477
查看次数

适用于Windows Phone 7的Drag'n'Drop可排序列表框

我在Windows Phone 7应用程序中有一个包含几个项目的ListBox.我希望用户能够通过触摸并拖动它们(在ListBox模板的左侧部分)对ListBox中的项进行排序.

我该如何实现?在Windows Phone 7上是否有标准的方法或控件来获得这种拖放功能(最好是动画)?

或者是否有一些其他控件/面板比ListBox更好用?

user-controls drag-and-drop windows-phone-7

7
推荐指数
0
解决办法
1132
查看次数

ASP.NET Core 中的 HttpHead

在我的 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# http-head asp.net-core

7
推荐指数
1
解决办法
8149
查看次数