发送开发时发生意外错误,但未实时发生

Posted

技术标签:

【中文标题】发送开发时发生意外错误,但未实时发生【英文标题】:An unexpected error occurred on a send on development but not in live 【发布时间】:2018-07-10 10:03:21 【问题描述】:

我有一个非常奇怪的错误,已经让我发疯了好几天。

我在我的 Visual Studio 开发环境中运行以下代码并收到错误“发送时发生意外错误”。编译代码并将其移动到没有Visual Studio的机器上,它工作正常

环境是 .Net 4.7.1,使用 Visual Studio 2015

public string Get(string resource)

   string url = BuildResourceUrl(resource);
   try
   
            WebRequest req = WebRequest.Create(url);
            req.Method = "GET";

            req.ContentType = "application/json";
            req.Headers.Add("X-Shopify-Access-Token", _apiPassword);

            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

            WebResponse response = req.GetResponse();

            Stream dataStream = response.GetResponseStream();

            StreamReader reader = new StreamReader(dataStream);

            string responseFromServer = reader.ReadToEnd();

            reader.Close();
            dataStream.Close();
            response.Close();

            return responseFromServer;
   
   catch (WebException ex)
   
            string response;

            using (var reader = new StreamReader(ex.Response.GetResponseStream()))
            
                response = reader.ReadToEnd();
            
            throw ex;
   

我已禁用所有防火墙和防病毒软件,但这没有任何区别。

帮助解决这个问题将是最appriciated

【问题讨论】:

你是从哪里得到这个消息的?在 exresponse 中的 catch 块中 尝试在此答案中指定 TLS 选项:***.com/a/43992910/246342 调试这些问题的最佳方法是使用像wireshark或fiddler这样的嗅探器。比较好的结果和坏结果中的标题。在这种情况下,PC 中安装的浏览器很可能是不同的。您可能需要为内容类型添加标题。您可能还必须在网络浏览器中手动删除 cookie。开发系统中可能存在阻止代码运行的错误 cookie。 我在 ex 上收到此错误,我尝试将 SecurityProtocal 更改为 ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 |安全协议类型.Tls11 |安全协议类型.Tls;但这也不起作用 【参考方案1】:

经过多次挖掘和挫折,我找到了解决方案。即使使用 .Net 4.7.1 我仍然必须使用以下代码

public string Get(string resource)
    
        string url = BuildResourceUrl(resource);
        try
        
            ServicePointManager.Expect100Continue = true;
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

            WebRequest req = WebRequest.Create(url);
            req.Method = "GET";

            req.ContentType = "application/json";
            req.Headers.Add("X-Shopify-Access-Token", _apiPassword);

            WebResponse response = req.GetResponse();

            Stream dataStream = response.GetResponseStream();

            StreamReader reader = new StreamReader(dataStream);

            string responseFromServer = reader.ReadToEnd();

            reader.Close();
            dataStream.Close();
            response.Close();

            return responseFromServer;
        
        catch (WebException ex)
        
            string response;

            using (var reader = new StreamReader(ex.Response.GetResponseStream()))
            
                response = reader.ReadToEnd();
            
            throw ex;
        
    

这似乎是 Shopify 特有的问题,因为我在向其他提供商调用 API 时没有任何问题

【讨论】:

以上是关于发送开发时发生意外错误,但未实时发生的主要内容,如果未能解决你的问题,请参考以下文章

SSIS 基础连接已关闭:发送时发生意外错误

Cake.build 错误:“底层连接已关闭:发送时发生意外错误”

远程服务器上的错误“底层连接已关闭:发送时发生意外错误”

无法将 xml 发送到 Web 服务 - 基础连接已关闭。发送时发生意外错误

安装VS 2015更新2后,“基础连接已关闭:发送时发生意外错误”

播放开发者控制台“发生意外错误。请稍后再试。”在 2017 年尝试打开控制台的任何部分时发生