小编Ric*_*per的帖子

使用ServiceHost在单元测试中托管WCF服务

我正在尝试编写一些单元测试来测试我的WCF服务的端点,为此我想在单元测试本身而不是在IIS中托管服务.我找到了这篇文章,我已经阅读并进行了更改,所以我使用它进行托管ServiceHost,我可以看到单元测试试图运行它但我似乎遇到了一些问题.

当我运行测试时,我在打开服务时收到以下错误:

此服务需要ASP.NET兼容性,并且必须在IIS中托管.在IIS中托管服务并在web.config中启用ASP.NET兼容性,或将AspNetCompatibilityRequirementsAttribute.AspNetCompatibilityRequirementsMode属性设置为Required以外的值.

这是由我的服务类上的以下属性设置引起的:

[AspNetCompatibilityRequirements( RequirementsMode = AspNetCompatibilityRequirementsMode.Required )]
Run Code Online (Sandbox Code Playgroud)

然后我尝试将以下内容添加到我的app.config中,但它似乎没有任何区别:

<system.serviceModel>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
</system.serviceModel>
Run Code Online (Sandbox Code Playgroud)

我有什么想法可以解决这个问题吗?

.net asp.net wcf unit-testing mstest

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

我可以创建一个WCF,其中多个调用不会相互阻塞

我有一个WebAPI应用程序使用HTTP连接调用WCF服务.对WebAPI的调用来自用户浏览器.WCF服务托管在单独的IIS应用程序中.

由于一些遗留代码,WCF服务中的一个方法是一个长时间运行的进程,例如30秒,它产生一个大字节数组,然后我们返回并传递.

还有另一种方法不是一个长时间运行的过程,应该立即返回.但是,当客户端调用长进程时,阻止其他方法完成,直到长进程完成.

我尝试过很多东西,例如在服务中添加以下内容:

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, InstanceContextMode=InstanceContextMode.PerCall)]
Run Code Online (Sandbox Code Playgroud)

并将以下内容添加到配置中:

  <system.net>
    <connectionManagement>
      <add address = "*" maxconnection = "100" />
    </connectionManagement>
  </system.net>
Run Code Online (Sandbox Code Playgroud)

并关闭会话状态:

<sessionState mode="Off" />
Run Code Online (Sandbox Code Playgroud)

但是,我无法让这些调用并行工作.我知道这与WCF服务防止Session问题的方式有关,但是我已经关闭了aspNetCompatibilityEnabled,我没有使用HttpContext会话或缓存,所以我不确定导致阻塞的原因.

关于如何让这些调用并行工作而不对其进行重大修改的任何想法?

c# asp.net wcf asp.net-web-api

6
推荐指数
1
解决办法
730
查看次数

动态创建GroupBy语句

我正在尝试动态重新构建一些要在树视图中显示的数据,这将允许用户选择以下三个以下维度来按以下方式对数据进行分组:

Organisation
Company
Site
Division
Department
Run Code Online (Sandbox Code Playgroud)

因此,例如,如果用户选择他们想要按公司分组然后选择Site然后分部......以下代码将执行所需的分组.

var entities = orgEntities
// Grouping Level 1
.GroupBy(o => new { o.CompanyID, o.CompanyName })
.Select(grp1 => new TreeViewItem
        {
        CompanyID = grp1.Key.CompanyID,
        DisplayName = grp1.Key.CompanyName,
        ItemTypeEnum = TreeViewItemType.Company,
        SubItems = grp1
               // Grouping Level 2
               .GroupBy(o => new { o.SiteID, o.SiteName })
               .Select(grp2 => new TreeViewItem
               {
               SiteID = grp2.Key.SiteID,
               DisplayName = grp2.Key.SiteName,
               ItemTypeEnum = TreeViewItemType.Site,
               SubItems = grp2
                  // Grouping Level 3
                  .GroupBy(o => new { o.Division })
                  .Select(grp3 => new …
Run Code Online (Sandbox Code Playgroud)

c# linq

5
推荐指数
1
解决办法
241
查看次数

标签 统计

asp.net ×2

c# ×2

wcf ×2

.net ×1

asp.net-web-api ×1

linq ×1

mstest ×1

unit-testing ×1