我在使用从Windows服务到我的Web服务器上运行的WCF服务的WCF调用时遇到问题.这个电话已经工作了好几个星期,但后来突然停止了工作,此后一直没有工作.
我得到的例外是:
发生常规错误System.ServiceModel.CommunicationException:发出HTTP请求时发生错误
然后它说
这可能是由于在HTTPS情况下未使用HTTP.SYS正确配置服务器证书.这也可能是由客户端和服务器之间的安全绑定不匹配引起的.
我在两端使用的安全性是wsHttpBinding,没有任何加密.它也只是使用HTTP - 而不是HTTPS,所以我不确定它为什么抱怨HTTPS.
内部异常堆栈的其余部分是:
SystemNet.WebException:基础连接已关闭:发送时发生意外错误.---> System.IO.IOException:无法将数据写入传输连接:提供了无效参数.---> System.Net.Sockets.SocketException:在System.Net.Sockets.NetworkStream.MultipleWrite(BufferOffsetSize [])的System.Net.Sockets.Socket.MultipleSend(BufferOffsetSize [] buffers,SocketFlags socketFlags)中提供了无效参数.缓冲区)
我还应该注意到,我的程序中发生这种情况的点是在Web服务调用的"执行"行 - 也就是说,只要我调用Web服务并将其传递给包装的DataContract对象,它炸毁.
所有这些服务正在做的是传递大量的XML(作为.NET对象传递给客户端的调用),然后它做了一些工作.可能正在传输大约100-200k的XML.我已经将两端数据大小的限制提高到超过6兆,但这似乎没有帮助.
有任何想法吗?
有关此问题的更多信息:
当我们在本地复制客户端环境时,我们发现除非我们进行以下更改,否则我们无法上传大量的XML:1.在服务器上,将"maxRequestLength"设置为100 MB(比我们发送的方式更高)2.在客户端,我们将dataContractSerializer标记下的maxItemsInObjectGraph的值设置为"2147483646".
通过这些更改,我们的本地安装成功上传.但是,客户端在其服务器上的安装仍然失败.有趣的是,一旦我们在服务器上更改了maxRequestLength值,我们的测试安装就会开始抛出一个与maxItemsInObjectGraph设置有关的错误.而在我们客户端的服务器上,仍然发生原始的"HTTP.sys"错误.
正如我之前提到的,我们根本没有使用SSL,还有2个其他Web服务调用以相同的方式执行和上传XML.但是,由于非工作服务呼叫传输更多数据,这似乎是一个大小问题.
但是,如果客户端遇到的问题与我们的测试安装相同,我不明白为什么客户端错误消息与ObjectGraph错误无关.
是否有可能我们只是为客户端上的每个可能的错误获取通用的"无效参数""HTTP.sys"错误(即它真的得到了objectGraph错误,但只是没有显示它?)
如果您安排SQL Server作业每隔X分钟运行一次,并且在分钟数达到之前它没有完成上一次调用,它是否会跳过运行,因为它已在运行,或者它将运行两个实例工作做同样的步骤?
我一直在使用LINQ-To-SQL来解决内存使用问题.我在Windows服务中使用它来进行一些处理,我正在循环遍历大量数据,我正在从上下文中撤回.是的 - 我知道我可以通过存储过程来做到这一点,但有理由说这不是理想的解决方案.
无论如何,我所看到的基本上是内存即使在我打电话后也没有被释放context.SubmitChanges()
.所以我最终不得不做各种各样奇怪的事情,比如只追回100条记录,或创建几个上下文并让它们都做单独的任务.如果我保持不变DataContext
并稍后将其用于其他调用,它只会占用越来越多的内存.即使我调用查询返回给我Clear()
的" var tableRows
"数组,将其设置为null,并调用SYstem.GC.Collect()
- 它仍然不会释放内存.
现在我已经阅读了一些关于如何DataContexts
快速使用并快速处理它们的内容,但似乎它们应该是强制上下文转储所有数据(或特定表的所有跟踪数据)的方法.某一点保证内存是免费的.
有人知道哪些步骤可以保证释放内存?
我经常与用户讨论的事情是他们希望快速获得解决方案,这意味着他们有时会说"哎呀,我只是卷起袖子然后在Access中完成它 - 它安装在我的桌面上".
有时,我们很幸运,创建Access数据库的人将其后端转发到SQL Server,因此至少通常出现的mdb文件问题不是问题.
但是,我认为将Access前端部署到SQL Server数据库作为具有数千个用户和数十万行的企业解决方案仍然存在问题.
你对此有何看法?有哪些潜在的陷阱?
要么
这是一个完全可接受,稳定,可维护且强大的解决方案吗?
我正在研究将基于Web的SSRS报表生成器推广给最终用户的想法,以允许他们针对我们的生产应用程序数据库创建自己的报表.从我到目前为止看到的,这个工具比VS Biz Intel Studio报表设计器更容易使用,而且它更容易安装,并且最终用户更容易理解部署报表(最重要的是没有SQL)我猜).
有没有人对给用户这种权力的陷阱有任何想法或经验?现在,我们收到很多请求将数据导出到平面文件,以便他们可以读取它,然后在Access中构建报告,所以我认为SSRS会比Access更好...
我最近开始使用Team Foundation Server,并且在按照我希望的方式工作时遇到了一些麻烦.
我已经使用Subversion几年了,并且喜欢它的工作方式.我总是在每个项目下设置三个文件夹,Trunk,Tags和Branches.
当我在处理项目时,我的所有代码都位于名为"C:\ dev\projectname"的文件夹下.可以使用Subversion(使用switch命令)将此"projectname"文件夹指向trunk或任何分支或标记.
现在我正在使用TFS(我的客户端系统),我希望事情以同样的方式工作.我用我的项目创建了一个"Trunk"文件夹,并将"Project/Trunk/Website"映射到"c:\ dev\Website".
现在,我想在"tags"文件夹下找到一个版本(位于"Project/Tags/Version 1.0/Website"中,当我执行branch命令时TFS给出了以下错误:
"$ Project/tags/Version 1.0/Website没有适当的映射"
根据我在互联网上可以找到的内容,TFS希望您在项目的根目录(我的案例中为"Project"文件夹)中映射到您的硬盘驱动器,然后将所有源代码放在trunk,标签中和分支都拉到你的硬盘上.这很糟糕,因为它需要在你的硬盘驱动器上有太多东西,更糟糕的是,当你在Visual Studio中使用解决方案时,你将无法下载"2.0版"并将所有项目引用到其他项目工作,因为它们都将指向主文件夹下的"trunk"文件夹,而不仅仅是主文件夹本身.
我想要做的是在我的硬盘上有根"Project/Website"文件夹,并且能够让它指向(映射到)标签,分支或主干,这取决于我正在做什么,而不是通过修复Visual Studio项目引用来解决问题.
想法?
我正在为我的客户端做一些经典ASP应用程序的维护,当我正在浏览ASP时,脑海中浮现出以下问题 - 将经典ASP应用程序转换为ASP.NET MVC或ASP会更容易. NET WebForms?
在许多方面,似乎至少ASP的HTML可能更容易转换为MVC,而不是撕掉HTML块并将它们转换为ASP.NET控件,转发器,数据网格等.另外,必须添加可以添加ViewState等的处理和逻辑.
我不认为我的客户会要求任何这样的升级,所以这只是理论上的.
让我们假设这个ASP代码编写得非常好(当然并不总是这样),所以问题是,一个设计最好的ASP站点是否会比WebForms更好地迁移到MVC?
(请注意,我对ASP.NET MVC很新,所以我可能会遗漏一些关键的东西).
这对我来说似乎是个错误......
我接受自动属性,定义如下:
public decimal? Total { get; set; }
Run Code Online (Sandbox Code Playgroud)
首次访问时将为null.它们尚未初始化,因此它们当然是空的.
但是,即使在通过+ =设置它们的值之后,这个十进制?仍然是空的.之后:
Total += 8;
Run Code Online (Sandbox Code Playgroud)
总计仍为空.这怎么可能是正确的?我知道它正在做一个(null + 8),但似乎很奇怪,它没有拿起它意味着它应该只被设置为8 ...
补遗:
我在我的问题中提出了"null + 8" - 但请注意它适用于字符串.所以,它确实为null +"hello"就好了,并返回"hello".因此,在幕后,它将字符串初始化为值为"hello"的字符串对象.对于其他类型,IMO,行为应该是相同的.这可能是因为字符串可以接受null作为值,但是,空字符串仍然不是初始化对象,对吗?
也许这只是因为一个字符串不是可以为空的......
所有,
所以我已经将LINQ-to-SQL中的所有选择查询转换为使用CompiledQueries来加快速度.到目前为止,对于select语句来说效果很好,但是我还没弄清楚如何预编译insert,update或delete语句.
当然,当您在LINQ-to-SQL中插入,删除或更新时,必须使用对象模型.但显然在它生成查询的某个地方,预编译和存储在静态成员中会很好.
这可能吗?什么是LINQ性能,如更新,删除和插入时,它没有预编译?我可以看到它比选择快得多,因为他们在下面做的更简单,更少"动态"......
我一直在我的代码中得到这个例外,并想知道是否有人可以帮助我.
我有一个绑定到ObjectDataSource的Repeater控件,并且转发器的itemtemplate包含一个用户控件(ASCX).该用户控件又包含几个其他控件,主要是与ObjectDataSource关联的GridView.
在此设置中初始使用控件时,一切都很好 - 数据显示正常.但是,当我更改过滤器选项(转发器外部的下拉菜单),然后重新绑定Repeater时,我得到异常:
ObjectDataSource控件'expDataSource'没有命名容器.确保在调用DataBind之前将控件添加到页面中."在System.Web.UI.Web.控件,控件控件,字符串控件ID中的System.Web.UI.WebControls.DataBoundControlHelper.FindControl(控件控件,字符串控件ID)......"处于System.Web.UI.WebControls.ObjectDataSource. LoadCompleteEventHandler(Object sender,EventArgs e)
我不确定问题是什么 - 我在一些地方读过,将数据源移到ASCX控件之外可能会有所帮助 - 这没什么用.objectdatasource看起来结构合理,正如我所说,它是第一次(仅).
我在堆栈跟踪中注意到,当发生LoadComplete()之后ASP.NET正在调用FindControl()时发生这种情况.如果我单步执行代码,似乎所有代码都在执行之前完成执行,因此它是所有"系统"代码.
为什么ASP.NET无法在LoadComplete处理程序中找到此数据源控件?
谢谢!
其他说明:
每隔一次都会发生此错误.因此,第一次正确加载数据时,第二次刷新会因此错误而失败.再次单击"加载",它可以工作(第三次).
在它失败的时候,看起来在ASCX控件中调用了两次"Page_Load".所以模式是:
数据加载正常
这一切都发生在对"Repeater.DataBind()"的调用中,但它的行为会有所不同,具体取决于它是否已被绑定(显然).
更多说明:
真奇怪的行为.我从ObjectDataSource的底部删除了SelectParameters列表,突然之间,该页面没有拒绝ObjectDataSource,因为没有NamingContainer.当然,没有这些参数,数据绑定实际上不会起作用......我可以在代码中添加它们,但为什么它会重要?
asp.net ×2
linq-to-sql ×2
ms-access ×2
asp-classic ×1
asp.net-mvc ×1
c# ×1
data-binding ×1
database ×1
datasource ×1
exception ×1
linq ×1
memory-leaks ×1
precompiled ×1
sql ×1
sql-server ×1
svn ×1
tfs ×1
usability ×1
wcf ×1
wcf-security ×1
web-services ×1
xml ×1