2013-05-02 97 views
3

我让到HTTPS站点的请求与此代码:发送时发生意外错误。从传输流EOF或0字节

webRequest = (HttpWebRequest)WebRequest.Create(new Uri(urlDestination)); 
      webRequest.Method = "POST"; 
      webRequest.ContentType = "application/x-www-form-urlencoded"; 
      webRequest.ContentLength = bytes.Length; 

      Stream writer = webRequest.GetRequestStream(); 
      writer.Write(bytes, 0, bytes.Length); 
      if (writer != null) 
      { 
       writer.Close(); 
      } 

      response = new StreamReader(webRequest.GetResponse().GetResponseStream()).ReadToEnd(); 

,并得到这个错误:在网络上检查有关错误后

System.Net.WebException: The underlying connection was closed: An unexpected error occurred on a send. ---> System.IO.IOException: Received an unexpected EOF or 0 bytes from the transport stream. 
    at System.Net.FixedSizeReader.ReadPacket(Byte[] buffer, Int32 offset, Int32 count) 
    at System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest) 
    at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest) 
    at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest) 
    at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest) 
    at System.Net.Security.SslState.ForceAuthentication(Boolean receiveFirst, Byte[] buffer, AsyncProtocolRequest asyncRequest) 
    at System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResult lazyResult) 
    at System.Net.TlsStream.CallProcessAuthentication(Object state) 
    at System.Threading.ExecutionContext.runTryCode(Object userData) 
    at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData) 
    at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
    at System.Net.TlsStream.ProcessAuthentication(LazyAsyncResult result) 
    at System.Net.TlsStream.Write(Byte[] buffer, Int32 offset, Int32 size) 
    at System.Net.PooledStream.Write(Byte[] buffer, Int32 offset, Int32 size) 
    at System.Net.ConnectStream.WriteHeaders(Boolean async) 
    --- End of inner exception stack trace --- 
    at System.Net.HttpWebRequest.GetRequestStream(TransportContext& context) 
    at System.Net.HttpWebRequest.GetRequestStream() 
    at Nop.Proxy.send_sync_post.process(NameValueCollection parametersReceived) 
    at Nop.Proxy.Includes.Page_Load(Object sender, EventArgs e) 

我我发现这个解决方案,并没有工作:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3; 

抽空他说,他遇到了这个错误的供应商后

SSL_do_handshake() failed (SSL: error:1408A0C1:SSL routines:SSL3_GET_CLIENT_HELLO:no shared cipher) while SSL handshaking 

我知道错误来自我的部分,但不知道如何使请求跳过错误。

回答

1

ssl3的说明确实解决了我的问题,但我遇到了另一个不适用于我的建议,但它对您有用,因为您有内容长度声明。

建议删除该语句。

我的工作代码如下:

//Create WebRequest 
Uri JsonUri = new Uri(new Uri(JIRAInstanceUri), ServiceUri); 
WebRequest RestWebRequest = WebRequest.Create(JsonUri); 
RestWebRequest.Method = "GET"; 
RestWebRequest.ContentType = "application/json"; 
//Add proxy to WebRequest 
ProxyServer.BypassArrayList.Add(JsonUri); 
RestWebRequest.Proxy = ProxyServer; 
//Setup authorization 
string Base64Credentials = GetEncodedCredentials(UserName, Password); 
RestWebRequest.Headers["Authorization"] = "Basic " + Base64Credentials; 
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;