问题:我得到这个异常"的基础连接已关闭:意外错误发生在一个发送"我的日志,它是在随机时间打破了我们的OEM集成与我们的电子邮件营销系统从不同[1小时 - 4小时]
我的网站托管在带有IIS 7.5.7600的Windows Server 2008 R2上.该网站拥有大量的OEM组件和全面的仪表板.除了我们在仪表板中用作iframe解决方案的电子邮件营销组件之外,网站的所有其他元素都可以正常工作.它的工作方式是,我发送一个httpWebRequestobject与所有凭据,我得到一个网址,我把它放在一个iframe,它的工作原理.但它仅适用于一段时间[1 HOUR - 4小时],然后我得到下面的异常"的基础连接已关闭:意外错误发生在一个发送"即使系统尝试从HttpWebRequest的它获取URL失败,同样的例外.使其再次工作的唯一方法是回收应用程序池或在web.config中编辑任何内容.我真的很精疲力尽所有我能想到的选择.
明确添加, keep-alive = false
keep-alive = true
增加时间: <httpRuntime maxRequestLength="2097151" executionTimeout="9999999" enable="true" requestValidationMode="2.0" />
我已将此页面上传到非SSL网站,以检查我们的生产服务器上的SSL证书是否正在建立连接以放弃一些方法.
非常感谢任何解决方向.
代码:
Public Function CreateHttpRequestJson(ByVal url) As String
Try
Dim result As String = String.Empty
Dim httpWebRequest = DirectCast(WebRequest.Create("https://api.xxxxxxxxxxx.com/api/v3/externalsession.json"), HttpWebRequest)
httpWebRequest.ContentType = "text/json"
httpWebRequest.Method = "PUT"
httpWebRequest.ContentType = "application/x-www-form-urlencoded"
httpWebRequest.KeepAlive = False
'ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3
'TODO change the integratorID to the serviceproviders account Id, useremail
Using streamWriter = New StreamWriter(httpWebRequest.GetRequestStream())
Dim json As …Run Code Online (Sandbox Code Playgroud) 现在已经发现SSL 3容易受到POODLE攻击:
System.Net.WebRequest在连接到任何https Uri时使用哪些版本的SSL/TLS?
我使用WebRequest连接到多个第三方API.其中一个已经表示他们将阻止使用SSL 3的任何请求.但是WebRequest是.Net核心框架的一部分(使用4.5),因此它使用的版本并不明显.
我在使用从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错误,但只是没有显示它?)
我有一个应用程序使用HTTPS POST将数据发送到服务器.我使用System.Net.WebClient对象来执行此操作.这是一个发送一些数据的函数:
private byte[] PostNameValuePairs(string uri, NameValueCollection pairs)
{
byte[] response;
String responsestring = "";
using (WebClient client = new WebClient())
{
client.Headers = GetAuthenticationHeader();
string DataSent = GetNameValueCollectionValuesString(pairs);
try
{
response = client.UploadValues(uri, pairs);
responsestring = Encoding.ASCII.GetString(response);
}
catch (Exception e)
{
responsestring = "CONNECTION ERROR: " + e.Message;
return Encoding.ASCII.GetBytes(responsestring);
}
finally
{
_communicationLogger.LogCommunication(uri, client.Headers.ToString(), DataSent, responsestring);
}
}
return response;
}
Run Code Online (Sandbox Code Playgroud)
我们传入一个以https://开头的URI
这已经很长时间了.今天,我们开始收到以下连接错误:"基础连接已关闭:发送时发生意外错误".我们对服务器的所有者进行了一些故障排除,他们最终将其缩小到以下内容.他们对服务器进行了更改以阻止TLS 1.0,并表示我们现在需要使用TLS 1.1或1.2发送数据.
我需要在我的WebClient对象(或我的函数中的其他位置)中设置什么才能使用TLS 1.1或1.2而不是TLS 1.0?
我们正在使用.NET Framework 4.5,如果这有所作为.
我们的.net WCF客户端,WebRequest调用,编译到运行在Win2012-R2上的Windows EXE,拒绝连接到仅面向TLS 1.2的Web服务器
我们知道Win2012和.NET 4.5x支持TLS 1.2
当服务器表面TLS 1.0及更高版本时,我们没有问题.只有当我们连接的服务器具有DISABLED TLS 1.0,1.1和SSL2以及SSL3时才会出现此问题.Server ONLY表面TLS 1.2.Chrome和firefox(在Win 7及更高版本上)可以很好地连接到服务器(没有任何警告或SSL问题).
服务器证书是%100 OK.
问题是WebRequest在这种情况下无法连接.
我们需要在代码中设置什么,以便我们使用WebRequest将连接到可能运行TLS 1.2,1.1,1.0和/或SSL v3的系统?
我正在运行一个.Net WCF Web服务,它处理几个不同的请求SOAP消息,并在IIS(版本7)下托管.如果对Web服务端点使用传输安全性(https),如何在此WCF服务中确定传入请求SOAP消息的已使用TLS/SSL版本和密码值?
我们仍在使用VS 2010 SP1来开发大型LOB ASP.NET Web应用程序.基础设施人员正在考虑将.NET 4.6(以及针对开发人员的目标包)推向桌面,我无法找到与VS 2010兼容的任何内容.其中一个主管说这两个是不兼容的,不能一起使用您必须拥有VS 2012或更高版本,但我找不到任何关于该主题的官方消息.有人知道是否可以使用.NET 4.6和VS 2010 SP1进行开发?
我试图从asp.net的角度检查客户端在尝试与我的应用程序交互时使用的安全协议.我有不同的应用程序托管asp.net Web应用程序,asmx webservices,asp.net mvc,wcf服务.请建议我如何通过ssl/tls协议知道请求.
我的目的是告诉我的应用程序用户使用tls而不是因为poodle漏洞而使用ssl3.
我有使用一些Web服务并通过JSON获取数据的应用程序,所有工作都运行良好很长时间,直到最新发现有关SSLv3容易受到中间人攻击并且服务器所有者关闭SSLv3 .我的应用程序开始出现连接问题并返回错误"请求已中止:无法建立安全的SSL/TLS连接".我试图寻找解决方案并找到信息,我必须在创建Web请求之前添加此代码:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
ServicePointManager.ServerCertificateValidationCallback = delegate{
return true;
};
Run Code Online (Sandbox Code Playgroud)
不幸的是,这里没有运气,app的行为和以前一样,我不知道这段代码什么都不做,或者服务器还有问题.错误信息非常模糊,我有问题找出出错的地方.
这是我的代码
...
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.ContentType = GetRequestContentType();
request.Method = method.ToString();
request.Credentials = GetCredential(url);
request.PreAuthenticate = true;
CookieContainer cookieContainer = new CookieContainer();
request.CookieContainer = cookieContainer;
...
Run Code Online (Sandbox Code Playgroud)
我想问一下如何设置Tls12作为默认值,并确保在我的最终请求中我使用所需的协议.
如果我确认我的应用程序在我的最终工作正常,是否有办法从服务器响应中获取更详细的信息并找出错误的确切原因?
感谢所有的答案和建议.
编辑
问题的第二部分已经解决,我发现这个工具http://www.telerik.com/download/fiddler它几乎允许查看传出和传入数据的情况.此工具还允许解码SSL连接,启用此选项可使我的应用程序开始工作.我假设这个应用程序可以实现我的应用程序和目标主机之间的通信.但我仍然不知道它可能是什么.以及如何使我的应用程序自己正确处理这些连接.
我有一个Web服务,我们目前正在HTTPS站点中托管它.
我的约束力是这个.
<wsHttpBinding>
<binding maxReceivedMessageSize="2000000" >
<readerQuotas maxStringContentLength="2147483647" />
<security mode="Transport">
</security>
</binding>
</wsHttpBinding>
Run Code Online (Sandbox Code Playgroud)
它似乎运作良好.但我的主要目标是确保Web服务请求和响应都是加密的.我对网络服务了解不多,但是它有什么用呢?
只需使用HTTPS并将此行放在您的配置中?
<security mode="Transport">
</security>
Run Code Online (Sandbox Code Playgroud)
或者还有更多吗?我怎么知道发送的邮件是否加密?
我正在使用basicHttpsbinding如下的web服务
EXCClient CreateClient()
{
var binding = new System.ServiceModel.BasicHttpsBinding();
binding.ReaderQuotas.MaxArrayLength = int.MaxValue;
binding.MaxReceivedMessageSize = int.MaxValue;
binding.UseDefaultWebProxy = false;
var endpoint = new System.ServiceModel.EndpointAddress("https://{siteName}/{service}");
var client = new EXCClient(binding, endpoint);
return client;
//return new EXCClient();
}
Run Code Online (Sandbox Code Playgroud)
使用站点托管在IIS 7.5上,并且在服务器上有多个站点.我正在使用.net表单站点,调用代码如下所示
var x = service.Client.GetResults({parameter});
Run Code Online (Sandbox Code Playgroud)
运行此服务时将返回大约15分钟的结果,然后开始出现此错误.
将HTTP请求发送到https:// {siteName}/{service} /时发生错误.这可能是由于在HTTPS情况下未使用HTTP.SYS正确配置服务器证书.这也可能是由客户端和服务器之间的安全绑定不匹配引起的
底层连接已关闭:发送时发生意外错误.---> System.IO.IOException:由于意外的数据包格式,握手失败.
如果我为站点回收应用程序池,则服务开始再次返回结果大约15分钟,然后再次开始失败.我的应用程序池没有内存限制.
的app.config模样
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_EXC">
<security mode="Transport" />
</binding>
<binding name="BasicHttpBinding_EXC1" />
</basicHttpBinding>
</bindings>
<client>
<endpoint address="https://vadrs.tax.utah.gov/vdx/" binding="basicHttpsBinding"
bindingConfiguration="BasicHttpBinding_EXC" contract="UTVehicleServices.EXC"
name="BasicHttpBinding_EXC" />
</client>
Run Code Online (Sandbox Code Playgroud) 我们在 Azure 服务器中托管了一个 Web 应用程序(在 Azure 服务器中使用 api)。出于安全目的,我们想知道服务器是否在 tls 1.2 下(我想对于非云服务器,我们只需要在 regedit 中查看即可知道)。
我已经看过有关如何从 azure 服务器禁用 ssl 3 的主题,请参见:
我想启用 tls 1.2 我们将不得不做这种事情......
所以我的问题是: - 如何知道 azure 服务器是否在 tls 1.2 下 - 如果不是,如何将 azure 服务器设置为 tls 1.2
感谢您的帮助。
ssl ×6
c# ×4
wcf ×4
.net ×3
asp.net ×2
wcf-security ×2
.net-4.0 ×1
.net-4.5 ×1
.net-4.6 ×1
asmx ×1
azure ×1
connection ×1
iis ×1
security ×1
tls1.2 ×1
wcf-binding ×1
web-services ×1
webclient ×1
webrequest ×1
xml ×1