我们有一个WCF方法,它使用第三方库从其服务器导入数据(通过HTTP Web服务调用)。我们的方法在循环中运行并调用库来获取数据。
该方法需要很长时间(超过15分钟)才能完成。奇怪的是,当服务在我们的生产服务器上运行时(但是当我们在本地服务器上运行时),我们看到HTTP错误代码400被发送回调用的Javascript,即使方法没有看到异常 (我们记录进度和文件的任何异常)并完成处理似乎成功 - 它继续登录到文件并使用外部服务器的结果更新SQL,即使消息显示在浏览器上也是如此。
在浏览器中,我们在“网络”选项卡中看到HTTP响应,以及指示错误对象引用异常的ASP.NET错误页面(HTML)。
即使响应已经传递到浏览器,我仍然很困惑Web方法如何继续。在ASMX Web服务中,可以使用HttpApplication.CompleteRequest
发送响应并继续。在WCF中有替代方案吗? WebOperationContext
类有一个OutgoingWebResponseContext
对象,但我没有看到主动发送回复的选项。特别是,我确定我们的代码没有做任何这样的事情 - 这个库有可能吗?
或者可能是库调用创建线程和其中一个崩溃,导致HTTP结果甚至通过其他线程继续发回?
这是捕获消息的ajax代码;问题当然是在服务器端,只是想显示呼叫。服务方法很复杂,没有启发性。
$.ajax({
cache: false,
type: "POST",
async: true,
url: 'http://my-domain/service/integration.svc/ImportClients'
headers: { 'AuthenticationGuid': getAuthenticationGuid() },
contentType: 'application/json; charset=utf-8',
dataType: 'json',
data: JSON.stringify(jData),
success: function (response, status, xhr) { alert('all good'); },
error: function (xhr, status, error) {
alert("Error\n-----\n" + xhr.status + '\n' + xhr.responseText); }
});
我正在寻找有关如何在服务器上的代码不间断运行时跟踪问题发生位置的见解。在WCF方法中是否有办法拦截响应的返回?