我正在尝试使用SmtpClient在.NET中编写通知服务(用于完全合法的非垃圾邮件目的).最初我只是通过每个消息循环并发送它,但这很慢,我想提高速度.所以,我切换到使用'SendAsync',但现在第二次调用时出现以下错误:
An asynchronous call is already in progress.
Run Code Online (Sandbox Code Playgroud)
我读到这意味着MS瘫痪System.Net.Mail以防止群发邮件.它是否正确?如果是这样,有没有更好的方法在.NET中执行此操作,并且仍然能够记录每封电子邮件的结果(这对我们的客户来说很重要).如果没有,为什么SendAsync只能被调用一次?
我正在开发一个类库,它将在许多不同的Web应用程序中使用,甚至可能作为开源项目提供.有几点我想使用IoC,但我不希望类库的使用者必须使用一个特定的实现.设计这个库的最佳方法是什么,以便它具有IoC的优点,但不依赖于一个IoC框架?
具体来说,此库包含依赖于各种服务接口的ASP.NET MVC控制器.我知道我可以创建一个IoCControllerFactory,但我不确定这是否是最好的方法,因为一些用户可能无法或不想在他们的应用程序中使用它只是为了获得我的库提供的功能.
我们编写了一个WCF服务供Java商店使用,他正在使用CXF生成适配器.我们不熟悉Java,但使用basicHttpBinding,SSL和基本身份验证公开了服务.集成测试表明.NET客户端可以正常使用该服务.但是,Java商店在使用该服务时遇到了麻烦.具体来说,它们得到以下JAXB错误:两个声明导致ObjectFactory类中的冲突.当CXF尝试创建适配器类时,如果2个操作具有相同的名称和命名空间,则通常会导致这种情况.
我们找不到任何应该导致任何类型冲突的类型或操作名称.我们已确保所有自定义类型都指定了命名空间,并且未在WSDL中的任何位置指定tempuri.org.Java商店怀疑错误是因为生成的WSDL包含<xsd:import元素.
所以,我的问题:
我正在学习MVC并且在决定何时应该创建新控制器而不是仅添加与现有控制器关联的操作和视图时遇到问题.一方面,单一责任似乎表示控制器应限于少数几个动作.但是,当我尝试这个时,类的数量呈指数级增长(每个类型的模型,视图和控制器) - 我想知道我是否会过火.
例如,默认AccountController具有Login,ChangePassword和Register操作.我倾向于创建一个LoginController,PasswordController和ProfileController,以及相关的模型类.那么有1个班级,那里会有3-6个班级.
这有什么好的经验法则吗?
我开发了一些ASP.NET MVC应用程序,并喜欢这个框架.但是,有一点我不太明白为什么它仅限于网页用户界面.看起来分离视图和控制器的原因之一是允许多个视图重用相同的控制器逻辑.例如,我应该能够在与Web UI相同的控制器上挂起WPF UI.但我怀疑,我误解了关注点分离的根本性.ASP.NET MVC控制器是否仅限于在Web应用程序中使用?
更新:我不太感兴趣"是否有可能在桌面上做MVC" - 我知道Prism等允许这样做.然而,从设计的角度来看,我们希望分离关注点的一个"原因"是可重用性.如果我们不能重用控制器,感觉就像我们在重写WPF应用程序中的相同逻辑时重复自己.下面的答案确实为我澄清了一些.
我有一个ASP.NET MVC表单,该表单将报告作为File(...)结果返回。这意味着触发文件下载后,浏览器将停留在当前页面上。使用jQuery,我想禁用“提交”按钮,然后在文件返回后重新启用它。我的代码已经很好地禁用了按钮,但是,我找不到文件返回后触发的事件。
这是我到目前为止的内容:
$(document).ready(function() {
$("#downloadForm").submit(function() {
$("#cmdSubmit").attr("disabled", "disabled");
$("#uiProgress").show();
});
});
Run Code Online (Sandbox Code Playgroud)
当表单提交返回时,我可以添加什么来触发?
我有一种感觉,我对此过于"网状",但无论如何我都会问.我在ASP.NET MVC项目中有一个表单,它有一些输入字段和两个按钮.一个按钮用于"过滤"其中一个列表框.另一个用于提交表单.我的观点看起来像这样:
<%using (Html.BeginForm())
{%>
<%=Html.TextBox("SearchItems") %>
<input type="submit" name="Command" value="Find" />
<%=Html.ListBox("SelectedItems", new MultiSelectList(model.AvailableItems,"Id", "Name", model.SelectedItems))%>
//Some other form fields.
<input type="submit" name="Command" value="Send" />
<%} %>
Run Code Online (Sandbox Code Playgroud)
我的动作看起来像这样:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index([Bind(Prefix = "")]SendMessageRequest model)
{
if (model.Command == "Find")
return SearchItems(model);
if (model.Command == "Send")
return Send(model);
throw new Exception("Invalid command.");
}
Run Code Online (Sandbox Code Playgroud)
这样做 - 控制器根据单击的按钮选择正确的操作.但是,它并不理想,因为输入按钮的值也是显示的文本.如果我想翻译这个应用程序,那么行动就会破裂.为了解决这个问题,我可以使用<button>元素,它允许文本和值不同.但是,这个应用程序是用于Pocket IE,显然Pocket IE处理这些不同 - 它提交Command的两个值,这打破了行动.
因为这是针对Pocket IE的,所以我对JavaScript的处理方式也非常有限.Ajax已经出局,但我可以通过按钮'onClick设置隐藏字段.
所以,我的问题是在MVC视图中允许单个表单有多个按钮的最佳方法是什么?或者,我应该以某种方式将我的观点分解为多种形式吗?