我有一个公开两个服务的 WCF 项目。当我在本地构建服务时,它工作正常。当 TFS 构建创建程序集时,其中一项服务不起作用。在调用服务之前,客户端应用程序会引发“索引超出数组边界”异常。
我们将 TFS2010 用于迁移的基于 MSBuild 的项目,而不是新的工作流程。
我可以用我机器上的发布构建版本替换 TFS 构建的 DLL,并且服务开始工作。我可以将 TFS 构建的 DLL 版本放在我的机器上,我的本地服务开始失败。
我检查过的事情:
- 所有项目都设置为构建发布 | 任何 CPU
- 两台机器都安装了VS2010 SP1
- 反汇编这两个 DLL 显示它们包含相同的代码
有点担心:我的机器是 Windows 7 x64,构建机器是 Windows Server 2003 x86。但是,我认为任何 CPU 都意味着在构建过程中这不应该是一个问题。
有没有人对调查此问题的其他方法有任何建议?
来自客户端的堆栈跟踪包括:
System.ServiceModel.FaultException 1[System.ServiceModel.ExceptionDetail]: Index was outside the bounds of the array. (Fault Detail is equal to An ExceptionDetail, likely created by IncludeExceptionDetailInFaults=true, whose value is:
System.IndexOutOfRangeException: Index was outside the bounds of the array.
at Microsoft.CSharp.RuntimeBinder.ExpressionTreeCallRewriter.GetMethodInfoFromExpr(EXPRMETHODINFO methinfo)
at Microsoft.CSharp.RuntimeBinder.ExpressionTreeCallRewriter.GenerateCall(EXPRCALL pExpr)
at Microsoft.CSharp.RuntimeBinder.ExpressionTreeCallRewriter.VisitCALL(EXPRCALL pExpr)
at Microsoft.CSharp.RuntimeBinder.Semantics.ExprVisitorBase.Dispatch(EXPR pExpr)
at Microsoft.CSharp.RuntimeBinder.Semantics.ExprVisitorBase.Visit(EXPR pExpr)
at Microsoft.CSharp.RuntimeBinder.ExpressionTreeCallRewriter.GenerateLambda(EXPRCALL pExpr)
at Microsoft.CSharp.RuntimeBinder.ExpressionTreeCallRewriter.VisitCALL(EXPRCALL pExpr)
at Microsoft.CSharp.RuntimeBinder.Semantics.ExprVisitorBase.Dispatch(EXPR pExpr)
at Microsoft.CSharp.RuntimeBinder.Semantics.ExprVisitorBase.Visit(EXPR pExpr)
at Microsoft.CSharp.RuntimeBinder...