小编BBa*_*r42的帖子

您可以在WCF服务方法中使用可选参数吗?

我见过类似的帖子这个这个,但他们均几年的历史.

我可以这样做吗?

    [OperationContract]
    [FaultContract(typeof(MyCustomFault))]
    List<InventoryPart> SelectMany(string partialPartNumber, string division = null);
Run Code Online (Sandbox Code Playgroud)

c# wcf optional-parameters

19
推荐指数
1
解决办法
3万
查看次数

使用字母和短划线排序字符串时出现意外行为

如果我有一些字符串列表包含所有数字和破折号,他们将按升序排序:

s = s.OrderBy(t => t).ToList();
Run Code Online (Sandbox Code Playgroud)

66-0616280-000
66-0616280-100
66-06162801000
66-06162801040

这是预期的.

但是,如果字符串包含字母,则排序有些出乎意料.例如,这里是相同的字符串列表,尾随A代替0,是的,它是排序的:

66-0616280-00A
66-0616280100A
66-0616280104A
66-0616280-10A

我原以为他们会这样排序:

66-0616280-00A
66-0616280-10A
66-0616280100A
66-0616280104A

当字符串包含字母时,为什么排序在字符串上的行为不同?

提前致谢.

c# sorting

14
推荐指数
2
解决办法
1481
查看次数

实体框架和WPF最佳实践

直接与上下文合作是不是一个好主意?例如,假设我有一个客户数据库,用户可以按名称搜索,显示列表,选择一个,然后编辑该客户的属性.

我似乎应该使用上下文来获取客户列表(映射到POCO或CustomerViewModels),然后立即关闭上下文.然后,当用户选择CustomerViewModels列表中的一个时,UI的客户属性部分就会填充.

接下来,他们可以更改名称,类型,网站地址,公司规模等.点击保存按钮后,我打开一个新的上下文,使用该ID CustomerViewModel来检索该客户记录,并更新其每个属性.最后,我调用SaveChanges()并关闭上下文.这是一项很多工作.

我的问题是为什么不直接与上下文一起工作呢?我读过使用相同的上下文,生命周期很长,非常糟糕,不可避免地会引发问题.我的假设是,如果应用程序仅由一个人使用,我可以保持上下文打开并执行所有操作.但是,如果有很多用户,我想维护一个简洁的工作单元,从而根据每个请求打开和关闭上下文.

有什么建议?谢谢.


@PGallagher - 感谢您的全面解答.
@Brice - 您的输入也很有帮助

然而,@ Manos D."冗余代码的缩影"评论让我有点担忧.让我举一个例子.假设我将客户存储在数据库中,而我的一个客户属性是CommunicationMethod.

[Flags]
public enum CommunicationMethod
{
    None = 0,
    Print = 1,
    Email = 2,
    Fax = 4
}
Run Code Online (Sandbox Code Playgroud)

WPF中我的管理客户页面的UI将包含客户通信方法(打印,电子邮件,传真)下的三个复选框.我无法将每个复选框绑定到该枚举,这没有意义.此外,如果用户点击该客户,起床并去吃午餐......上下文会在那里停留数小时,这很糟糕.相反,这是我的思考过程.

最终用户从列表中选择一个客户.我新建了一个上下文,找到该客户并返回一个CustomerViewModel,然后关闭了上下文(为了简单起见,我已经将存储库留在了这里).

using(MyContext ctx = new MyContext())
{
    CurrentCustomerVM = new CustomerViewModel(ctx.Customers.Find(customerId));
}
Run Code Online (Sandbox Code Playgroud)

现在,用户可以选中/取消选中打印,电子邮件,传真按钮,因为它们绑定到CustomerViewModel中的三个bool属性,该属性也有Save()方法.开始.

public class CustomerViewModel : ViewModelBase
{
    Customer _customer;

    public CustomerViewModel(Customer customer)
    {
        _customer = customer;
    }


    public bool CommunicateViaEmail
    {
        get { return _customer.CommunicationMethod.HasFlag(CommunicationMethod.Email); }
        set …
Run Code Online (Sandbox Code Playgroud)

wpf entity-framework

13
推荐指数
1
解决办法
1万
查看次数

OWIN中间件来关联和记录请求和响应?

我正在编写一个自定义OWIN中间件来记录所有http请求及其响应.我想用trackingId"关联"这些.这是代码:

public class PacketTrackingMiddleware
{
    private readonly AppFunc _next;

    public PacketTrackingMiddleware(AppFunc next)
    {
        _next = next;
    }

    public async Task Invoke(IDictionary<string, object> environment)
    {
        IOwinContext context = new OwinContext(environment);            
        var request = context.Request;
        var response = context.Response;

        //capture details about the caller identity

        var identity = (request.User != null && request.User.Identity.IsAuthenticated)
            ? request.User.Identity.Name
            : "(anonymous)";

        var apiPacket = new ApiPacket
        {
            CallerIdentity = identity
        };

        //buffer the request stream in order to intercept downstream reads
        var requestBuffer = new MemoryStream(); …
Run Code Online (Sandbox Code Playgroud)

c# owin

10
推荐指数
1
解决办法
3433
查看次数

在angularjs ui-router状态下解析多个对象?

这是我的代码:

.state("dashboard.userRoles", {
    url: "/user/:id/roles",
    controller: "userRolesController as vm",
    templateUrl: "app/auth/users/user-roles.html",
    resolve: {
        user: function (userResource, $stateParams) {
            return userResource.get({ id: $stateParams.id }).then(function (res) { return res.data; });
        },
        roles: function($http, $stateParams) {
            var url = appSettings.authApiBaseUrl + "api/accounts/users/" + $stateParams.id + "/roles";
            return $http.get(url).then(function(res) { return res.data; });
        },
        loadMyFiles: function($ocLazyLoad) {
            return $ocLazyLoad.load({
                name: "app",
                files: [
                    "app/auth/users/userRolesController.js"
                ]
            });
        }
    }
})
Run Code Online (Sandbox Code Playgroud)

如果我导航到dashboard.userRole并查看fiddler,我会看到获取用户资源的请求,但不是角色.如果我注释掉用户:部分,我会看到在fiddler中获取角色的请求.为什么我不能解决这两个问题?我应该将id发送到控制器并获取所有内容吗?

我试图避免在控制器中收集数据,因为它应该只是视图模型的东西和ui之间的缝合.也许那没关系?提前致谢.


编辑1: 好的,我可以将代码更改为此,并查看fiddler中显示的两个请求,并且它们都返回格式正确的json数据:

.state("dashboard.userRoles", {
    url: "/user/:id/roles",
    controller: "userRolesController as vm",
    templateUrl: "app/auth/users/user-roles.html",
    resolve: …
Run Code Online (Sandbox Code Playgroud)

angularjs angular-ui-router

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

WCF端点配置错误:"合同"属性无效?

我有一个WCF服务让我们称之为UserService.它UserService有一个类库的引用.我们称之为DoWork.dll.它DoWork.dll具有对我们将调用的不同服务的WCF服务引用CompanyService.

现在,当我第一次尝试调用时,UserService我会得到一个端点未配置的错误消息.各地的网络阅读后,我发现我需要在添加CompanyService绑定和客户信息进入UserServiceweb.config<system.serviceModel>节点.

这里是:

<system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="BasicHttpBinding_IComapnyService" />
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint name="BasicHttpBinding_ICompanyService"
          address="http://it-dev.company.local:81/Project/Copmpany/CompanyService.svc"
          binding="basicHttpBinding" 
          bindingConfiguration="BasicHttpBinding_IComapnyService"
          contract="CompanyService.ICompanyService"  />
    </client>
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是contract="CompanyService.ICompanyService"向我显示错误:

'contract'属性无效 - 值'CompanyService.ICompanyService'根据其数据类型'clientContractType'无效 - Enumeration约束失败.

现在,如果我将CompanyService引用直接添加到UserServiceWCF项目,则错误消失(显然).但是,我不应该这样做.我已经尝试完全限定ICompanyService合同所在的命名空间,但也不起作用.我删除了.suo文件并重建项目,但也无法工作(在网络上的其他地方建议).此外,如果我输入contract=,我会得到下拉列表,但CompanyService.ICompanyService无处可寻(只有当我直接在UserService项目中引用服务时).

我已经尝试使用配置它Tools > WCF Service Configuration Editor,但没有帮助.

我应该注意到一切似乎工作正常,但我不喜欢intellisense给我蓝色波浪线下划线和错误信息的事实.我有一种感觉,我需要其他的东西,web.config以便让它工作,因为UserService引用DoWork.dll,反过来引用CompanyService谁的合同,我无法正确看到.

任何建议都非常感谢.提前致谢.

wcf web-config wcf-endpoint

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

FluentValidation允许null还是指定长度?

我有这样的规则:

RuleFor(m => m.Title).Length(1, 75);
Run Code Online (Sandbox Code Playgroud)

但是,如果标题是空的,我仍然得到验证,说明标题长度必须在1个到75字符之间,输入0.

如何更改规则以允许空标题,但如果指定了一个,则必须介于1到75个字符之间?谢谢.

fluentvalidation

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

使用CQRS处理中介管道中的错误/异常?

我正在尝试按照Jimmy Bogard的这篇文章来实现一个中介管道,这样我就可以使用前/后请求处理程序来完成一些工作.从那篇文章的评论中,我来到这个github要点.我不太明白如何挂钩所有这些,所以这是我的第一次去.仅供参考 - 我正在使用Autofac进行DI和Web Api 2.遵循CQRS,这是一个查询.

public class GetAccountRequest : IAsyncRequest<GetAccountResponse>
{
    public int Id { get; set; }
}

//try using fluent validation
public class GetAccountRequestValidationHandler 
    : AbstractValidator<GetAccountRequest>, IAsyncPreRequestHandler<GetAccountRequest>
{
    public GetAccountRequestValidationHandler() {
        RuleFor(m => m.Id).GreaterThan(0).WithMessage("Please specify an id.");
    }

    public Task Handle(GetAccountRequest request) {
        Debug.WriteLine("GetAccountPreProcessor Handler");   
        return Task.FromResult(true);
    }
}

public class GetAccountResponse
{
    public int AccountId { get; set; }
    public string Name { get; set; }
    public string AccountNumber { get; set; …
Run Code Online (Sandbox Code Playgroud)

c# autofac cqrs asp.net-web-api2 mediatr

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

如何防止重复的http请求?

我们有Intermec CK71移动设备(WiFi)。在任何情况下,设备都会发送请求(GET,PUT或POST),然后失去连接。我们可以使用什么方法来防止重复的PUT或POST?客户端设备如何在断开连接之前知道服务器是否处理了请求?

我已经看到过类似的帖子,但是标记的答案并没有太多细节。我什至不知道从哪里开始。我应该研究缓存(ETag,最后修改)还是某种形式的握手?

客户端设备上装有.Net Compact Framework 3.5,并且正在通过其Web API 2端点访问服务器。

如果有人可以指出正确的方向或提出任何建议,将不胜感激。谢谢。

caching compact-framework asp.net-web-api2

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

没有 SSL 证书的 SQL Server 2012 ForceEncryption?

使用大约 2 年前一些顾问提供的信息,我们设置了一个 SQL Server 2012 框以始终具有加密连接(至少我们是这样认为的)。一周前,SSL 证书已过期,并且一切正常,这令人费解。

我们通过执行以下操作强制加密:

获取 SSL 证书并通过 MMC 将其安装在 SQL Server 上。此步骤的明确说明在此处。

  1. 打开 SQL Server 配置管理器并展开左侧窗格中的 SQL Server 网络配置节点。
  2. 右键单击 MSSQLServer 的协议并选择属性。
  3. 转到证书选项卡并从下拉列表中选择已安装的 SSL 证书。
  4. 转到标志选项卡并将强制加密设置为是。

现在,由于 SSL 证书已过期,因此当我访问上面的第 3 步时,下拉列表中不再选择任何证书。但是,我将WireShark放在DB服务器上并使用SSMS请求一些数据。TDS(表格数据流)数据包仍然加密?当我将 WireShark 放在不同的数据库服务器上时,我将 ForceEncryption 设置为 NO,这些 TDS 数据包未按预期加密。

所以我的问题是:

  1. 如果证书过期,TDS 数据包如何仍然加密?
  2. 即使证书有效,为什么我不必选择选项 > 加密连接来连接到我的加密数据库服务器?我认为设置 ForceEncryption=Yes 需要所有客户端连接在其连接字符串(或 SSMS 复选框)中指定加密?
  3. 如果 Web API 是访问我的数据库的唯一方法,并且它们是通过 SSL 进行的,那么是否有必要对 SQL 协议进行加密?

sql-server encryption ssl https wireshark

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