如何解决WCF 调用错误:连接尝试失败,因为连接方在一段时间后没有正确响应
我编写了一个托管在服务器 1 上的 WCF 服务。我可以从本地电脑成功调用它,但是当我尝试从服务器 2 调用相同的函数时,它显示以下错误:
发生了一个或多个错误。 (连接尝试失败,因为 关联方在一段时间后未正确响应,或 建立的连接失败,因为连接的主机未能 回应。
我的代码是:
var client = new Sepidar_WcfService.SepidarClient();
Task<Sepidar_WcfService.ISepidarServiceOutput> tStocks = client.GetStocksAsync("1","1");
堆栈跟踪是:
System.AggregateException:发生一个或多个错误。 (连接尝试失败,因为连接方在一段时间后没有正确响应,或建立连接失败,因为连接的主机没有响应)---> System.ServiceModel.CommunicationException:连接尝试失败,因为连接方没有响应一段时间后没有正确响应,或者建立连接失败,因为连接的主机没有响应---> System.Net.Http.HttpRequestException:连接尝试失败,因为连接方在一段时间后没有正确响应,或由于连接的主机未能响应而建立的连接失败 ---> System.Net.Sockets.SocketException: 连接尝试失败,因为连接方在一段时间后没有正确响应,或由于连接的主机失败而建立的连接失败回复
在 System.Net.Http.ConnectHelper.ConnectAsync(字符串主机,Int32 端口,CancellationToken 取消令牌)
--- 内部异常堆栈跟踪结束 ---
在 System.Net.Http.ConnectHelper.ConnectAsync(字符串主机,Int32 端口,CancellationToken 取消令牌)
在 System.Threading.Tasks.ValueTask1.get_Result() at System.Net.Http.HttpConnectionPool.CreateConnectionAsync(HttpRequestMessage request,CancellationToken cancellationToken) at System.Threading.Tasks.ValueTask
1.get_Result()
在 System.Net.Http.HttpConnectionPool.WaitForCreatedConnectionAsync(ValueTask1 creationTask) at System.Threading.Tasks.ValueTask
1.get_Result()
在 System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage 请求,布尔 doRequestAuth,CancellationToken 取消令牌)
在 System.Net.Http.AuthenticationHelper.SendWithAuthAsync(HttpRequestMessage 请求,Uri authUri,ICredentials 凭据,布尔预验证,布尔 isProxyAuth,布尔 doRequestAuth,HttpConnectionPool 池,CancellationToken 取消令牌)
在 System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage 请求,CancellationToken 取消令牌)
在 System.Net.Http.DecompressionHandler.SendAsync(HttpRequestMessage 请求,CancellationToken 取消令牌)
在 System.Net.Http.HttpClient.FinishSendAsyncUnbuffered(Task1 sendTask,HttpRequestMessage request,CancellationTokenSource cts,Boolean disposeCts) at System.ServiceModel.Channels.HttpChannelFactory
1.HttpClientRequestChannel.HttpClientChannelAsyncRequest.SendRequestAsync(Message message,TimeoutHelper timeoutHelper)
--- 内部异常堆栈跟踪结束 ---
在 System.Runtime.AsyncResult.End[TAsyncResult](IAsyncResult 结果)
在 System.ServiceModel.Channels.ServiceChannel.SendAsyncResult.End(SendAsyncResult 结果)
在 System.ServiceModel.Channels.ServiceChannel.EndCall(String action,Object[] outs,IAsyncResult result)
在 System.ServiceModel.Channels.ServiceChannelProxy.TaskCreator.c__DisplayClass1_0.b__0(IAsyncResult asyncResult)
--- 内部异常堆栈跟踪结束 ---
在 System.Threading.Tasks.Task1.GetResultCore(Boolean waitCompletionNotification) at Nop.Services.Catalog.UpdateWarehouses.Execute() at Nop.Services.Tasks.Task.ExecuteTask() at Nop.Core.Caching.MemoryCacheManager.PerformActionWithLock(String key,TimeSpan expirationTime,Action action) in C:\Business\Projects\nopCommerce_4.10_Source\Libraries\Nop.Core\Caching\MemoryCacheManager.cs:line 205 at Nop.Services.Tasks.Task.Execute(Boolean throwException,Boolean ensureRunOncePerPeriod) ---> (Inner Exception #0) System.ServiceModel.CommunicationException: A connection attempt failed because the connected party did not properly respond after a period of time,or established connection failed because connected host has failed to respond ---> System.Net.Http.HttpRequestException: A connection attempt failed because the connected party did not properly respond after a period of time,or established connection failed because connected host has failed to respond ---> System.Net.Sockets.SocketException: A connection attempt failed because the connected party did not properly respond after a period of time,or established connection failed because connected host has failed to respond at System.Net.Http.ConnectHelper.ConnectAsync(String host,Int32 port,CancellationToken cancellationToken) --- End of inner exception stack trace --- at System.Net.Http.ConnectHelper.ConnectAsync(String host,CancellationToken cancellationToken) at System.Threading.Tasks.ValueTask
1.get_Result()
在 System.Net.Http.HttpConnectionPool.CreateConnectionAsync(HttpRequestMessage 请求,CancellationToken 取消令牌)
在 System.Threading.Tasks.ValueTask1.get_Result() at System.Net.Http.HttpConnectionPool.WaitForCreatedConnectionAsync(ValueTask
1 creationTask)
在 System.Threading.Tasks.ValueTask1.get_Result() at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request,Boolean doRequestAuth,CancellationToken cancellationToken) at System.Net.Http.AuthenticationHelper.SendWithAuthAsync(HttpRequestMessage request,Uri authUri,ICredentials credentials,Boolean preAuthenticate,Boolean isProxyAuth,HttpConnectionPool pool,CancellationToken cancellationToken) at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request,CancellationToken cancellationToken) at System.Net.Http.DecompressionHandler.SendAsync(HttpRequestMessage request,CancellationToken cancellationToken) at System.Net.Http.HttpClient.FinishSendAsyncUnbuffered(Task
1 sendTask、HttpRequestMessage 请求、CancellationTokenSource cts、Boolean disposeCts)
在 System.ServiceModel.Channels.HttpChannelFactory`1.HttpClientRequestChannel.HttpClientChannelAsyncRequest.SendRequestAsync(Message message,IAsyncResult result)
在 System.ServiceModel.Channels.ServiceChannelProxy.TaskCreator.c__DisplayClass1_0.b__0(IAsyncResult asyncResult)
任何帮助都会被感谢!
解决方法
我发现问题了,问题是,我尝试用http调用WCF服务,而服务客户端有https协议。因此该问题与“同源政策”概念有关。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。