esp*_*var 10 .net c# service wcf
当我尝试使用Web服务时,我得到以下异常.我的主要问题是这个例外何时发生?在服务器或客户端?错误在哪里?服务器是否针对各种故障抛出此信息?
我自己做了一些看似有效的改动
它实际上现在有效.我删除了使用并在服务客户端上添加了som清理.
if (Service != null && Service.State != CommunicationState.Faulted)
{
success = true;
Service.Close();
}
}
catch (Exception ex)
{
msg = "Error" + Environment.NewLine + ex.Message + Environment.NewLine + ex.StackTrace;
}
finally{
if (!success)
{
if (Service != null) Service.Abort();
}
}
Run Code Online (Sandbox Code Playgroud)
这是例外:
The communication object, System.ServiceModel.Channels.ServiceChannel, cannot be used for communication because it is in the Faulted state.
Server stack trace:
at System.ServiceModel.Channels.CommunicationObject.Close(TimeSpan timeout)
Exception rethrown at [0]:
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
at System.ServiceModel.ICommunicationObject.Close(TimeSpan timeout)
at System.ServiceModel.ClientBase`1.System.ServiceModel.ICommunicationObject.Close(TimeSpan timeout)
at System.ServiceModel.ClientBase`1.Close()
at System.ServiceModel.ClientBase`1.System.IDisposable.Dispose()
at bNet.Services.Customers.Cres.Helios.ServiceForm.Send(ServiceFormAction task) in C:\bNetProjects\bNet Web Tools\Solution root\bNet.Services\Customers\Cres\Helios\ServiceForm.cs:line 99
at bNet.Web.Sites.Public.Customers.Cres.ServiceSkjema.Units.Page.ServiceFormControl.SubmitFormClick(Object sender, EventArgs e) in C:\bNetProjects\bNet Web Tools\Solution root\bNet.Web.Sites.Public\Customers\Cres\ServiceSkjema\Units\Page\ServiceFormControl.ascx.cs:line 192
at System.Web.UI.WebControls.Button.OnClick(EventArgs e)
at System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)
at System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
at System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
at System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
Run Code Online (Sandbox Code Playgroud)
不要使用该using语句,而是尝试在没有它的情况下运行您的代码。
从
using(var client = new WCFClient())
{
// ... code
}
Run Code Online (Sandbox Code Playgroud)
到
var client = new WCFClient()
// ... code
Run Code Online (Sandbox Code Playgroud)
这样做后,我们能够看到原始WCF 无法用于通信,因为它处于故障状态消息是由using()调用本身引起的。为什么?我们使用 WCF 客户端的代码传递了无效凭据,服务器响应错误并将代理状态更改为故障。该using()块,因为我们知道,调用Dispose()的对象-在这种情况下,我们的WCF客户端。
因为WCF客户端失败,而WCF客户端处于故障状态,调用Dispose()导致错误WCF无法用于通信,因为它处于故障状态被抛出。
通过将使用 WCF 客户端的代码包装在一个try...catch块中,我们能够看到这一点。
| 归档时间: |
|
| 查看次数: |
62809 次 |
| 最近记录: |