我正在尝试在Azure上部署测试Web应用程序,但是当我在本地计算机上运行Azure模拟器时,我从附加到我的WebRole的Azure模拟器控制台中收到此错误:
System.TypeLoadException: Unable to load the role entry point due to the following exceptions:
-- System.IO.FileLoadException: Could not load file or assembly 'System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
File name: 'System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
=== Pre-bind state information ===
LOG: User = COLLAB\mirko.lugano
LOG: DisplayName = System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
(Fully-specified)
LOG: Appbase = file:///C:/Code/Application/<MyWebProject>.Azure/csx/Debug/roles/<MyWebProject>/approot/bin
LOG: Initial PrivatePath = C:\Code\Application\<MyWebProject>.Azure\csx\Debug\roles\<MyWebProject>\approot\bin
Calling assembly …Run Code Online (Sandbox Code Playgroud) 嗨,我正在建立一个云服务,目前有一个网络和一个工人角色.我想要的工作流程是:浏览器调用web角色上的webApi控制器,该角色将消息发送到队列(或服务总线),然后由工作角色处理.到现在为止还挺好.现在,当worker角色完成处理消息时,我想在web角色上调用一个方法,然后谁将向浏览器发出处理已完成的信号(通过SignalR).如果这不是一个正确的问题,请原谅我,因为这更像是一个"最佳实践"问题,而不是一个真正的问题.到目前为止我已经考虑了两种方法:
worker角色使用任务的进度和完成更新表行(在表存储中).Web角色没有信号.浏览器直接读取表存储(通过REST api),因此知道任务何时完成.虽然我不喜欢常规轮询的方法,但我希望有一个"基于事件"的解决方案,但这种方法效果很好(我已经测试过了).此外,一旦客户端获得进程已完成的信息,它必须执行对web api方法的附加调用,以向其他客户端(通过SignalR)广播操作已完成.
将Interrole通信与SignalR一起使用(参见下面的代码示例)也可以工作(已经过测试)
代码示例:
var protocol = "http";
var ipAddress = RoleEnvironment.Roles["XXX.YYY.Web"]
.Instances[0]
.InstanceEndpoints.ToArray()
.Where(ep => ep.Value.Protocol == protocol)
.First()
.Value.IPEndpoint.ToString();
var stringEndpoint = string.Format("{0}://{1}", protocol, ipAddress.ToString());
Trace.WriteLine("Retrieved endpoint address: " + stringEndpoint, "Information");
HubConnection connection = new HubConnection(stringEndpoint);
IHubProxy proxy = connection.CreateHubProxy("MyWebHub");
connection.Start().Wait();
//later...
proxy.Invoke("ProgressUpdated", clientId, progress);
Run Code Online (Sandbox Code Playgroud)
我的问题是:是否还有其他(更好)的方式来沟通方向工作者角色 - > Web角色?也就是说,当一个辅助角色完成处理时,触发Web角色的方法?然后,Web角色上的方法将通过SignalR将更新广播到所有客户端.我还看了一下事件中心,但据我了解,事件消费者仍然会在工作角色上运行.
我在Azure App Service上部署了一个Web应用程序作为Web App.我将一些证书上传到Azure门户,因为Web App通过SSL运行,我们使用另一个证书来执行某些解密.
对于后一种情况,我有一个方法(在本地工作正常)来查找证书:
public static X509Certificate2 FindCertificate(KnownCertificate certificate)
{
return FindCertificate(StoreName.My, StoreLocation.CurrentUser, X509FindType.FindByThumbprint, certificate.Thumbprint);
}
Run Code Online (Sandbox Code Playgroud)
但是我收到错误,指出找不到指纹XYZ的证书.虽然,在Azure门户上它存在.(我上传并导入了它)
我按照此POST中的建议使用StoreLocation.CurrentUser,但它仍然无效.我使用错误的商店还是我错过了什么?
编辑:我已设法远程调试我的WebApp和VisualStudio的ImmediateWindow功能我已执行此代码
new X509Store(StoreName.CertificateAuthority, StoreLocation.CurrentUser).Certificates.Find(findType, findValue, false).Count;
Run Code Online (Sandbox Code Playgroud)
测试StoreNames和StoreLocations的所有可能组合,但无济于事.
是否有可能像这里所说的那样,为了使用除https流量之外的目的的证书,您需要一个Cloud Service,并且(我想)App Services不支持它?
我正在尝试从VS2012中的空白Web表单模板构建一个示例Web应用程序,并将PDFNet dll添加到它.如果我在.NET 3.5中运行该项目没问题.如果我在.NET> = 4中运行它我得到这个错误:
无法加载文件或程序集"PDFNet64"或其依赖项之一.尝试加载格式不正确的程序.
这是堆栈跟踪:
Assembly manager loaded from: C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll
Running under executable C:\Program Files (x86)\IIS Express\iisexpress.exe
--- A detailed error log follows.
=== Pre-bind state information ===
LOG: User = COLLAB\mirko.lugano
LOG: DisplayName = PDFNet64
(Partial)
WRN: Partial binding information was supplied for an assembly:
WRN: Assembly Name: PDFNet64 | Domain ID: 2
WRN: A partial bind occurs when only part of the assembly display name is provided.
WRN: This might result in the binder loading an …Run Code Online (Sandbox Code Playgroud) 嗨我在Aurelia CLI上有一个web应用程序runnig.
根据我在文档中看到的内容,Aurelia CLI始终"捆绑"运行,并且永远不会直接定位源文件.通过运行"au run -watch"命令,Aurelia"监听"文件更改并自动重新创建app-bundle.js.控制台的示例输出:
Starting 'readProjectConfiguration'...
Finished 'readProjectConfiguration'
Starting 'processMarkup'...
Starting 'processCSS'...
Starting 'configureEnvironment'...
Finished 'configureEnvironment'
Starting 'buildJavaScript'...
Finished 'processCSS'
Finished 'processMarkup'
Finished 'buildJavaScript'
Starting 'writeBundles'...
Tracing views/references...
Writing app-bundle.js...
Finished 'writeBundles'
Starting 'reload'...
Finished 'reload'
Run Code Online (Sandbox Code Playgroud)
这很酷,但就我而言,它会导致糟糕的开发人员体验.当我早上来上班时,我所做的任何更改都可以在app.bundle中更新,但在工作一段时间之后,"buildJavaScript"进程(请参阅控制台输出)总是需要更长时间才能完成,几个小时后工作甚至可达30-40秒!对我来说,作为开发人员工作并且必须测试许多小的变化,这是非常痛苦的.
我不时尝试(并且仍然这样做)停止"au run -watch"命令并再次重新执行它,最初它会变得更好一些,但过了一段时间后问题就出现了.
我的问题是:是否有解决方法,或者某种方法来加快速度,或者直接从源文件服务而不是捆绑版本,或者可能是其他解决方案?这可能是由于Aurelia本身的内存泄漏造成的吗?
更新:
每隔一段时间它就会变得如此之慢以至于它实际上都会崩溃.这是我今天(以及其他几次)从控制台获得的内容:
==== Details ================================================
[1]: _tickCallback(aka _tickDomainCallback) [internal/process/next_tick.js:~108] [pc=000000C928AFCE81](this=000003B0DF48BE31 <a process with map 0000012166110B71>) {...
FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
Run Code Online (Sandbox Code Playgroud) azure ×3
.net ×1
asp.net-mvc ×1
aurelia ×1
aurelia-cli ×1
binding ×1
c# ×1
gulp ×1
gulp-watch ×1
load ×1
redirect ×1
ssl ×1