如何发生堆栈溢出以及确保它不会发生的最佳方法是什么,或者是哪种方法可以防止,特别是在Web服务器上,但其他示例也会很有趣?
我们都知道斯蒂芬克莱里关于阻止异步代码的着名博文.在MVC 5中,以下代码在请求时死锁Home/Index:
public class HomeController : Controller
{
public string Index()
{
var model = AsyncMethod();
return model.Result;
}
private async Task<string> AsyncMethod()
{
await Task.Run(() => Thread.Sleep(2000));
return "Hello";
}
}
Run Code Online (Sandbox Code Playgroud)
但是,完全相同的代码在MVC Core Web应用程序中不会死锁.响应返回Hello.为什么?MVC Core是否允许多个线程在一个请求上下文中同时运行?在MVC Core中开发时,不要阻止异步代码短语过时吗?
通过仅指定一对括号作为导出列表,可以不导出模块的名称:
module MyModule () where
Run Code Online (Sandbox Code Playgroud)
在哪些情况下这会有用吗?据我所知,任何文件导入MyModule都无法使用内部声明的任何函数或类型MyModule.在这一点上似乎是语言的一个无用的功能,但我想这是有原因的.
我ImageView在使用FXML 加载图像时遇到问题.
我的控制器类:
public class BoxViewController {
@FXML
private Label label_boxID;
@FXML
private ImageView boximage;
public void initData(ObservableList<BoxProperty> observableList,
BoxService sBox,
TableView tableview) {
this.label_boxID.setText(
String.valueOf(this.boxproperty.getPboxid()));
Image image = new Image("boximage.jpg");
this.boximage = new ImageView();
this.boximage.setImage(image);
}
}
Run Code Online (Sandbox Code Playgroud)
因此,使用文本设置标签有效,但图像不会出现在我的ImageView中.对于ImageView,我在FXML文件中添加了一个ID:
<ImageView fx:id="boximage"
disable="false"
fitHeight="150.0" fitWidth="200.0"
layoutX="69.0" layoutY="322.0"
pickOnBounds="true"
preserveRatio="true" />
Run Code Online (Sandbox Code Playgroud)
我很困惑,为什么这不起作用,因为标签工作,但图像不会加载.
我还检查了是否boximage为空,但事实并非如此.也没有例外.
我刚刚发现可以将关键字var用作类名:
public class var // no problem here
{
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我重载隐式强制转换运算符,我可以以一种有趣的方式使用我的类:
namespace MyApp
{
class Program
{
static void Main(string[] args)
{
var x = 1; // var is of type MyApp.var
}
}
public class var
{
public implicit operator var(int i)
{
return new var();
}
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,是否仍然可以以某种方式使编译器推断出类型?这篇博客文章指出它是不可能的(转到以"或者,另一个例子"开头的段落),但也许自2009年以来发生了变化?
我有一个关于提升基类事件的问题.我目前正在阅读MSDN C#编程指南,我无法从下面的文章中理解一件事:
http://msdn.microsoft.com/en-us/library/vstudio/hy3sefw3.aspx
public void AddShape(Shape s)
{
_list.Add(s);
s.ShapeChanged += HandleShapeChanged;
}
Run Code Online (Sandbox Code Playgroud)
好的,所以我们用一个事件注册委托,我们将在引发事件时调用私有方法HandleShapeChanged.
public void Update(double d)
{
radius = d;
area = Math.PI * radius * radius;
OnShapeChanged(new ShapeEventArgs(area));
}
protected override void OnShapeChanged(ShapeEventArgs e)
{
base.OnShapeChanged(e);
}
Run Code Online (Sandbox Code Playgroud)
在这里,我们调用基类方法OnShapeChanged,它将成功触发事件.但是事件基于Shape类,那么它如何访问HandleShapeChanged方法,这是私有的?
我刚刚开始学习这门语言,所以请耐心等待.我对这个例子的理解可能远远不够.
我知道标题可能不完全清楚,但我不想让它太久.
在考虑对部分方法的限制时,有一件事让我感到困惑.在我看来,规则是不一致的.你可能知道:
部分方法必须始终具有返回类型void,并且它们不能具有使用out修饰符标记的任何参数.这些限制已到位,因为在运行时,该方法可能不存在,因此您无法将变量初始化为方法可能返回的内容,因为该方法可能不存在.同样,您不能拥有out参数,因为该方法必须初始化它并且该方法可能不存在.[1]
这对我来说听起来很明智.但与此同时:
如果没有实现部分方法声明,则您不能拥有任何尝试创建引用partial方法的委托的代码.同样,原因是该方法在运行时不存在.[1]
起初,所有这些规则似乎遵循相同的编译器逻辑.但是有一点不同.如第二个引文中所述,编译器仅在没有部分方法的方法实现时才发出错误.为什么它不能在其他场景中检查编译时的实现?当使用部分方法时,这将允许更大的灵活性,并且所有规则背后的逻辑将是相同的.
我担心我能得到的唯一答案是"因为它是如何实施的",但也许还有更多的东西呢?
[1] CLR来自C#,第四版
我有一个Web服务的WSDL(https://facturaelectronica.dian.gov.co/habilitacion/B2BIntegrationEngine/FacturaElectronica/facturaElectronica.wsdl),它指定它是SOAP 1.1并且应该使用WS-Security.
生成的SOAP标头应该像这样的样本:
<soapenv:Header>
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401wss-wssecurity-secext-1.0.xsd">
<wsse:UsernameToken>
<wsse:Username>8ac82326-3016-430f-8d69-9efc4bcefd8f</wsse:Username>
<wsse:Password>6361b7b5322acb07ced00a35a85a4cc5183da3a42ede0b07f5780 67a18425a55</wsse:Password>
<wsse:Nonce>FmbZRkx1jh2A+imgjD2fLQ==</wsse:Nonce>
<wsu:Created>2015-07-31T16:34:33.762Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
</soapenv:Header>
Run Code Online (Sandbox Code Playgroud)
有关如何在C#中执行此操作的任何建议?(试图使用WSE3.0和WCF,但没有工作)
谢谢.
路易斯
我有一个关于为for循环内的变量赋值的问题.据我所知,当有可能在尚未分配变量时,编译器会发出此错误消息,如Microsoft所述.
请注意,当编译器遇到可能导致使用未分配变量的构造时,即使您的特定代码没有,也会生成此错误.
我的代码看起来像这样:
static void Main(string[] args)
{
int i;
for (int j = 0; j <= 5; j++)
{
i = j;
}
Console.WriteLine(i.ToString());
Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)
我认为即使在这个特定的场景中i会被赋值,编译器也不会检查for语句中的实际条件,这意味着它会对待它
for (int j = 0; j <= -1; j++)
Run Code Online (Sandbox Code Playgroud)
一样的?
这是这个问题的后续问题。原始问题中的答案对我有所帮助,但我被困在其他地方。提醒一下,我想使用发布配置文件部署我的应用程序。我在 Azure 中的 Web 应用程序在 wwwroot 中有两个子文件夹,其中之一称为backend。我想将我的应用程序部署到该文件夹。我不确定为什么 msdeploy 想要创建任何东西,因为 Web 应用程序已经存在 - 我只需要在后端文件夹中获取工件。
这是日志的相关部分(一些名称更改为xyz):
2018-06-14T09:19:25.0295238Z 开始执行 msdeploy.exe
2018-06-14T09:19:25.0323018Z“C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe”-source:package='D:\a\r1\a\artifacts\drop\xyz.zip ' -dest:auto,computerName="https://xyz.scm.azurewebsites.net:443/msdeploy.axd?site=xyz/backend",userName="$xyz",password="***",authtype ="basic",includeAcls="False" -verb:sync -disableLink:AppPoolExtension -disableLink:ContentExtension -disableLink:CertificateExtension -setParamFile:"D:\a\r1\a\artifacts\drop\xyz.SetParameters.xml" - enableRule:DoNotDeleteRule -retryAttempts:6 -retryInterval:10000
2018-06-14T09:19:25.6154385Z 信息:使用 ID '89f1210b-39ba-4758-b7ee-76a06407a503' 连接到远程服务器。
2018-06-14T09:19:28.0800802Z 信息:创建应用程序(默认网站)
2018-06-14T09:19:28.2012951Z ##[调试]rc:1
2018-06-14T09:19:28.2013216Z ##[调试]rc:1
2018-06-14T09:19:28.2013360Z ##[调试]成功:假
2018-06-14T09:19:28.2013523Z ##[调试]成功:假
2018-06-14T09:19:28.2073234Z ##[错误]无法将 Web 包部署到应用服务。
2018-06-14T09:19:28.2081930Z ##[debug]Processed: ##vso[task.issue type=error;]无法将 Web 包部署到应用服务。
2018-06-14T09:19:28.2082198Z ##[调试]{}
2018-06-14T09:19:28.2082470Z ##[debug]System.DefaultWorkingDirectory=D:\a\r1\a
2018-06-14T09:19:28.2083178Z ##[error]错误代码:ERROR_USER_NOT_AUTHORIZED_FOR_CREATEAPP 更多信息:使用 Web 管理服务连接时,无法使用指定的提供程序(“createApp”)完成操作。如果服务器管理员未授权用户执行此操作,则会发生这种情况。createApp http://go.microsoft.com/fwlink/?LinkId=178034 了解更多信息: …
azure azure-web-app-service azure-pipelines-release-pipeline
c# ×6
async-await ×1
azure ×1
azure-pipelines-release-pipeline ×1
base ×1
events ×1
fxml ×1
haskell ×1
image ×1
imageview ×1
javafx ×1
memory ×1
module ×1
soap-client ×1
var ×1
web-services ×1
ws-security ×1