这个真让我难过.我和另一位打电话给我的开发商合作,因为他无法相信他所看到的.我们一起调试了调试器,我也看到了它并没有解释.这是场景.他正在编写一个方法,通过自动生成的COM包装器与第三方COM对象进行交互(仅通过添加COM组件作为参考生成.这是他的方法的顶部:
public bool RefolderDocument(ref IManDocument oDoc)
{
string strCustom1 = (string) oDoc.GetAttributeValueByID(imProfileAttributeID.imProfileCustom1);
string strCustom2 = (string) oDoc.GetAttributeValueByID(imProfileAttributeID.imProfileCustom2);
Run Code Online (Sandbox Code Playgroud)
代码的目的是从"文档"对象(oDoc)获取项目编号和子项目编号.
以下是您逐步完成后会发生的事情.在第一次赋值之后,strCustom1具有期望值"32344"(项目编号),并且strCustom2按预期为空.在第二次赋值之后,strCustom2得到子项目号"0002" - 但是strCustom1已经改为32334 - 一个字符已被更改!?
它让我感到震惊,因为某种老式的c语言堆栈溢出(即使它与COM组件互操作,我也不会在托管应用程序中看到它).我们都感到困惑.为了破解这种奇怪的现象,我尝试将第一个字符串的内容复制到另一个位置,如下所示:
public bool RefolderDocument(ref IManDocument oDoc)
{
string strCustom1 = string.Copy((string)oDoc.GetAttributeValueByID(imProfileAttributeID.imProfileCustom1));
string strCustom2 = string.Copy((string)oDoc.GetAttributeValueByID(imProfileAttributeID.imProfileCustom2));
Run Code Online (Sandbox Code Playgroud)
结果相同!我们此时正在抓住吸管,并将代码从.NET 4中删除到.NET 3.5(CLR 2),但没有变化.一个可能相关的观点是,这是一项服务,我们将附加到服务流程.构建目标是x86,服务位置肯定在Debug输出构建文件夹中.
这有什么合理的解释吗?我很难过如何继续.
我正在运行Visual Studio 2010 Ultimate - 它与TFS源代码控制集成.但是,当我运行SQL Server 2008 Business Inteligence Studio时,不提供源代码管理.当我查看工具...选项...源控制...没有插件可用.这是因为BI Studio使用2008 Visual Studio Shell而我只有VS 2010吗?TIA.
有很多帖子显示了如何手动完成 - 顺便说一下,我以前做过 - 但我很惊讶地发现没有Nuget软件包以类似的方式将此功能添加到您的WCF项目中您可以使用Unity.MVC3将Unity添加到MVC3项目中.我搜索了在线Nuget包源目录,但没有得到什么.如果我错过了一些明显的东西,如果你指出我正确的方向,我会很感激.
wcf dependency-injection inversion-of-control unity-container nuget
我希望每个人都会赦免这个问题的长度和叙事方式.我决定在我的博客中详细描述这种情况.后来我看到Joel对这个网站的邀请,我想我会把它粘贴在这里,看看有没有人对这种情况有所了解.
我编写并现在支持一个应用程序,该应用程序由一个Visual Basic胖客户端组成DCOM,使用ATL用C++编写的中间层COM +组件.它遍布我们所有的八个办事处.每个办公室都托管一个后端服务器,其中包含COM +应用程序(由18个独立组件组成)和SQLServer.SQLServer通常位于同一个后端服务器上,但不一定是这样.
我们最近将我们最大的办公室 - 纽约的后端服务器从MSC群集迁移到VMWare ESX技术上托管的新虚拟机.由于COM +应用程序的位置已从旧服务器移动到具有不同名称的新服务器,因此我不得不重定向所有客户端,以便它们在新服务器上激活COM +应用程序.这个过程很老套,因为我对几个经过类似基础设施升级的小型办公室做了同样的事情.
一切似乎都很常规,周一早上整个办公室 - 大约1,000个Windows XP工作站 - 在新服务器上运行时没有发生任何事故.但随后电话来自我的移动组 - 有一位律师在家工作,VPN连接在被重定向到新服务器后出现了一个奇怪的错误:
Error on FillTreeView2 - The stub received bad data.
咦?我以前从未见过这个错误信息.是新服务器吗?但办公室的所有工作站都运转正常.我告诉移动组将律师转回旧服务器(仍在运行),错误消失了.那有什么区别?原来这位律师在家里运行Vista.
我们不在任何办公室运行Vista,但我们确实有一些在家里运行Vista的律师(肯定是我在纽约办公室的一些).我也这样做,我从未见过这个问题.为了确认存在问题,我启动了我的Vista笔记本电脑,指向新服务器,并得到了同样的错误.我把它指回旧服务器,它工作正常.显然,Vista和新服务器上的组件存在一些问题 - 这个问题似乎不会影响XP客户端.会是什么呢?
下一站 - 笔记本电脑上的应用程序错误日志.这产生了有关错误的更多信息:
Source: Microsoft-Windows-RPC-Events Date: 9/2/2008 11:56:07 AM Event ID: 10 Level: Error Computer: DevLaptop Description: Application has failed to complete a COM call because an incorrect interface ID was passed as a parameter. The expected Interface ID was 00000555-0000-0010-8000-00aa006d2ea4, The Interface ID returned was 00000556-0000-0010-8000-00aa006d2ea4. User …
我最近下载了Rob Conery出色的ASP.NET Storefront参考应用程序,并发现它非常有启发性.我想到的一个问题是,应该放置Model类(以及它们所依赖的Data类).MVC项目模板创建一个Model文件夹.但在我看来,我会更好地将模型分解为一个单独的项目组件,以便其他潜在的应用程序(例如与网站的应用程序域相关的管理工具)可以重复使用它?
我很想得到别人的意见.
我经常在 SQL Management Studio 中执行临时查询,并且需要通过电子邮件将结果发送给人们。这种情况一天发生几次,因此我正在寻找将查询结果从结果窗口复制到 Outlook 电子邮件正文中的最佳方法,以便可以以读者友好的方式对其进行格式化。我还没有想出任何对我有用的东西。
如果真的很重要,我最终会进入 Excel,从那里执行查询,然后附加生成的电子表格。如果可能的话,我正在寻找我可以在不涉及 Excel 的情况下做的事情。有任何想法吗?
我正在观看Stephen A Bohlen出色的夏季NHibernate系列,并一直在观察他与CodeRush的互动.我最近安装了ReSharper(我是ReSharper新手),我试图找到一些与Stephen一起(切向)使用CodeRush的ReSharper生产力等价物.
作为一个例子,他演示了如何突出显示如下代码块:
ISession session = GetSession();
session.xxx
Run Code Online (Sandbox Code Playgroud)
然后把它变成
using (ISession session = GetSession())
{
session.xxx
}
Run Code Online (Sandbox Code Playgroud)
他通过使用using语句突出显示要包围的块然后调用一些CodeRush模板来完成此操作.我一直无法弄清楚如何用ReSharper做同样的事情.我找到了ReSharper Surround命令(在Code命令中),但是当你选择using语句时,它确实包围了你突出显示的代码块,但是将第一行放在using子句中似乎不够智能.也就是说,它导致:
using ()
{
ISession session = GetSession();
session.xxx
}
Run Code Online (Sandbox Code Playgroud)
这需要我将第一行移动到using子句中.我错过了一个更简单的方法吗?
resharper refactoring coderush visual-studio-2008 visual-studio
我试图从我的ASP.NET 2.0 WebForms应用程序中运行的WCF Web服务获取JQGrid的数据.问题是WCF Web服务期望将数据格式化为JSON字符串,并且JQGrid正在执行HTTP Post并将其作为Content-Type传递:application/x-www-form-urlencoded.
虽然返回到JQGrid的数据格式似乎有几种选择(它接受JSON,XML等),但似乎没有办法改变它将输入传递给Web服务的方式.
所以我试图找出如何调整WCF服务以便它接受
Content-Type: application/x-www-form-urlencoded
Run Code Online (Sandbox Code Playgroud)
而不是
Content-Type:"application/json; charset=utf-8"
Run Code Online (Sandbox Code Playgroud)
当我使用JQuery进行测试以使用url编码发送Ajax请求时(如下所示):
$.ajax({
type: "POST",
url: "../Services/DocLookups.svc/DoWork",
data: 'FirstName=Howard&LastName=Pinsley',
contentType: "Content-Type: application/x-www-form-urlencoded",
dataType: "json",
success: function(msg) {
alert(msg.d);
}
});
Run Code Online (Sandbox Code Playgroud)
呼叫失败.使用Fiddler检查流量,我发现服务器返回的错误:
{"ExceptionDetail":{"HelpLink":null,"InnerException":null,"Message":
"The incoming message has an unexpected message format 'Raw'. The expected
message formats for the operation are 'Xml', 'Json'. This can be because
a WebContentTypeMapper has not been configured on the binding.
See the documentation of WebContentTypeMapper for more details."...
Run Code Online (Sandbox Code Playgroud)
请注意,由于编码的不同,此代码可以正常工作
$.ajax({
type: "POST",
url: "../Services/DocLookups.svc/DoWork", …Run Code Online (Sandbox Code Playgroud) 我一直在使用Visual Studio的MSDeploy发布服务来发布我的项目.发布URL为https://machinename.domain.com:8172/MsDeploy.axd.它在VS2010中运行良好 - 我能够检查一个忽略证书错误的复选框.VS 2012中不再显示该框.我发现了一个帖子,表明我应该提示是否忽略证书错误 - 但我不是,我不能再发布我的项目了.有任何想法吗?
我在实体框架中使用.Skip和.Take方法.生成SQL时,.Skip调用很受欢迎..Take不是.这段代码:
public IList<DocPullRun> GetDocRunsPaginated(int startRowIndex, int maximumRows) {
Logger.Debug("GetDocRunsPaginated: startRowIndex: {0}, maximumRows: {1}", startRowIndex, maximumRows);
Debug.Assert(startRowIndex >= 0);
IOrderedQueryable<DocPullRun> sortedPulls =
from run in DB.DocPullRuns
.Include("DocumentPullDefinition")
.Include("DocumentPullDefinition.Case")
.Include("DocumentPullDefinition.DocCategory")
.Include("DocumentPullDefinition.Repository")
.Include("DocumentPullDefinition.Repository.ConcordanceRepository")
orderby run.PullStarted descending
select run;
IQueryable<DocPullRun> query = sortedPulls.Skip(startRowIndex);
if (maximumRows > 0)
query.Take(maximumRows);
return query.ToList();
}
Run Code Online (Sandbox Code Playgroud)
下面显示的SQL中的结果(请注意,在此调用中,startRowIndex为0,maximumRows为10).Where子句包含WHERE [Project1].[row_number]> 0(这是.Skip部分),但我希望看到一个Select TOP 10,而只是看到一个Select.结果列表包含10个以上的元素.请注意,我运行了SQL Trace,看到SQL确实是延迟的,直到最后一行才真正发送:query.ToList().这是某种类型的错误吗?
SELECT
[Project1].[C1] AS [C1],
[Project1].[Id] AS [Id],
[Project1].[PullStarted] AS [PullStarted],
[Project1].[PullEnded] AS [PullEnded],
[Project1].[MatchedQuery] AS [MatchedQuery],
[Project1].[NewDocs] AS [NewDocs],
[Project1].[UpdatedDocs] AS [UpdatedDocs],
[Project1].[DeletedDocs] …Run Code Online (Sandbox Code Playgroud)