我可以这样做吗?
[OperationContract]
[FaultContract(typeof(MyCustomFault))]
List<InventoryPart> SelectMany(string partialPartNumber, string division = null);
Run Code Online (Sandbox Code Playgroud) 如果我有一些字符串列表包含所有数字和破折号,他们将按升序排序:
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
当字符串包含字母时,为什么排序在字符串上的行为不同?
提前致谢.
直接与上下文合作是不是一个好主意?例如,假设我有一个客户数据库,用户可以按名称搜索,显示列表,选择一个,然后编辑该客户的属性.
我似乎应该使用上下文来获取客户列表(映射到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) 我正在编写一个自定义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) 这是我的代码:
.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) 我有一个WCF服务让我们称之为UserService.它UserService有一个类库的引用.我们称之为DoWork.dll.它DoWork.dll具有对我们将调用的不同服务的WCF服务引用CompanyService.
现在,当我第一次尝试调用时,UserService我会得到一个端点未配置的错误消息.各地的网络阅读后,我发现我需要在添加CompanyService绑定和客户信息进入UserService的web.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谁的合同,我无法正确看到.
任何建议都非常感谢.提前致谢.
我有这样的规则:
RuleFor(m => m.Title).Length(1, 75);
Run Code Online (Sandbox Code Playgroud)
但是,如果标题是空的,我仍然得到验证,说明标题长度必须在1个到75字符之间,输入0.
如何更改规则以允许空标题,但如果指定了一个,则必须介于1到75个字符之间?谢谢.
我正在尝试按照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) 我们有Intermec CK71移动设备(WiFi)。在任何情况下,设备都会发送请求(GET,PUT或POST),然后失去连接。我们可以使用什么方法来防止重复的PUT或POST?客户端设备如何在断开连接之前知道服务器是否处理了请求?
我已经看到过类似的帖子,但是标记的答案并没有太多细节。我什至不知道从哪里开始。我应该研究缓存(ETag,最后修改)还是某种形式的握手?
客户端设备上装有.Net Compact Framework 3.5,并且正在通过其Web API 2端点访问服务器。
如果有人可以指出正确的方向或提出任何建议,将不胜感激。谢谢。
使用大约 2 年前一些顾问提供的信息,我们设置了一个 SQL Server 2012 框以始终具有加密连接(至少我们是这样认为的)。一周前,SSL 证书已过期,并且一切正常,这令人费解。
我们通过执行以下操作强制加密:
获取 SSL 证书并通过 MMC 将其安装在 SQL Server 上。此步骤的明确说明在此处。
现在,由于 SSL 证书已过期,因此当我访问上面的第 3 步时,下拉列表中不再选择任何证书。但是,我将WireShark放在DB服务器上并使用SSMS请求一些数据。TDS(表格数据流)数据包仍然加密?当我将 WireShark 放在不同的数据库服务器上时,我将 ForceEncryption 设置为 NO,这些 TDS 数据包未按预期加密。
所以我的问题是:
c# ×4
wcf ×2
angularjs ×1
autofac ×1
caching ×1
cqrs ×1
encryption ×1
https ×1
mediatr ×1
owin ×1
sorting ×1
sql-server ×1
ssl ×1
wcf-endpoint ×1
web-config ×1
wireshark ×1
wpf ×1