网络服务即使完成后也不会将响应发送回给调用者

时间:2019-05-28 11:32:06

标签: c# azure web-services httprequest clr

我有一个Web服务,可从Blob中读取数据并将其导入到sql server管理的实例中。使用sql clr调用Web服务。

clr呼叫Web服务:

string WebServiceUri = string.Format("{0}/AzureWebSrvcFunction?ConnectionString={1}&FileName={2}",
                            WebServiceAddress,
                            AzureStorageConnectionString,
                            FileName);

HttpWebRequest request = (HttpWebRequest)CreateHttpWebRequest(WebServiceUri);
request.Timeout = 20 * 60 * 1000; //20 minutes
request.ReadWriteTimeout = 20 * 60 * 1000; //20 minutes
request.AllowWriteStreamBuffering = false;

using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) {
    using(var responseStream = response.GetResponseStream()) {
                    StreamReader reader = new StreamReader(responseStream);
                    SQLTableName = reader.ReadToEnd();
                }
}

网络服务功能:

[WebMethod(Description = "Read and parse blob data file", BufferResponse = true, EnableSession = false, CacheDuration = 0)]
public void AzureWebSrvcFunction(string ConnectionString, string FileName){
//imports the files from blob storage

HttpContext.Current.Response.Write("TableName" + TableName);
log("success");
}

Web服务配置文件:

<httpRuntime targetFramework="4.6.1" executionTimeout="1800"/>
<system.serviceModel>
  <bindings>
    <basicHttpBinding>
      <binding name="BasicHttpBinding_AzureServices"
                                      maxReceivedMessageSize="2147483647"
                                      maxBufferSize="2147483647"
                                      maxBufferPoolSize="2147483647"
                                      sendTimeout="00:30:00"
                                      receiveTimeout="00:30:00"
                                      openTimeout="00:30:00"
                                      closeTimeout="00:30:00">
      </binding>
    </basicHttpBinding>
  </bindings>
  </system.serviceModel>

当执行时间少于1分钟左右(要导入的较小文件)时,Web服务将完美运行。当文件较大时,恰好在4分10秒之后,我收到以下错误消息

  

System.Net.WebException:远程服务器返回错误:(502)   错误的网关。在System.Net.HttpWebRequest.GetResponse()在   AzureStorage.AzureWebSrvcFunction(...

有时它不会引发上述错误,并且20分钟(请求超时)后,它将引发以下错误。

  

System.Net.WebException:操作在以下位置超时   System.Net.HttpWebRequest.GetResponse()在   AzureStorage.AzureWebSrvcFunction(...

但是webserive在后台运行并成功完成,我可以看到日志文件中的最后一步(即“成功”),但是clr没有收到响应并抛出上述错误。

从Visual Studio运行它时,我也没有遇到这个问题,只有当我在Azure和SQL Server的clr中部署Web服务时,我才遇到这个问题。

我在这里想念什么?任何指针都会有所帮助。

0 个答案:

没有答案