您的位置:首页 > 其它

当应用程序不是以UserInteractive 模式运行时显示模式对话框或窗体

2017-09-22 17:41 405 查看
最近在做一个WCF程序的时候,WCF程序老是弹出一个错误“当应用程序不是以UserInteractive 模式运行时显示模式对话框或窗体是无效操作。请指定ServiceNotification或DefaultDesktopOnly样式,以显示服务应用程序发出的通知”这个错误的警告,后来通过try catch语句来捕获到了这个错误,并找到了一些提示信息。

很可能由 IncludeExceptionDetailInFaults=true 创建的 ExceptionDetail,其值为:

System.InvalidOperationException: 当应用程序不是以 UserInteractive 模式运行时显示模式对话框或窗体是无效操作。请指定 ServiceNotification 或 DefaultDesktopOnly 样式,以显示服务应用程序发出的通知。

在 System.Windows.Forms.MessageBox.ShowCore(IWin32Window owner, String text, String caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton, MessageBoxOptions options, Boolean showHelp)

在 System.Windows.Forms.MessageBox.Show(String text)

在 DataProvider.Utils.SQLServerHelper.Open() 位置 c:\Users\2457\Desktop\宁波市公路局\DataProvider(2015-10-26-最终版)\Utils\DataBaseSQLServerHelper.cs:行号 33

在 DataProvider.Utils.SQLServerHelper..ctor(String connectStr) 位置 c:\Users\2457\Desktop\宁波市公路局\DataProvider(2015-10-26-最终版)\Utils\DataBaseSQLServerHelper.cs:行号 21

在 DataProvider.Announcement..ctor() 位置 c:\Users\2457\Desktop\宁波市公路局\DataProvider(2015-10-26-最终版)\Announcement.cs:行号 21

在 CreateDataProvider.Announcement()

在 System.ServiceModel.Dispatcher.InstanceProvider.GetInstance(InstanceContext instanceContext, Message message)

在 System.ServiceModel.Dispatcher.InstanceBehavior.GetInstance(InstanceContext instanceContext, Message request)

在 System.ServiceModel.InstanceContext.GetServiceInstance(Message message)

在 System.ServiceModel.Dispatcher.InstanceBehavior.EnsureServiceInstance(MessageRpc& rpc)

在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41(MessageRpc& rpc)

在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc& rpc)

在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc)

在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc& rpc)

在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc& rpc)

在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& rpc)

在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc& rpc)

在 System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)}

    看到这些堆栈的调用信息之后,System.Windows.Forms.MessageBox.ShowCore这个是问题的核心,也就是在WCF程序中是不能出现窗体的相关代码,比如MessageBox、OpenFileDialog等相关代码,如果出现这些信息,程序就会经常出现这个错误,应为我们的WCF程序是部署在IIS上面的,IIS是不允许这样处理的。然后再看看我们的代码。

private void Open()

{

  try

  {

    sqlConn.Open();//打开数据库

  }

  catch (Exception ex) 

  {

    //MessageBox.Show(ex.Message);

  }

}

然后去掉整个程序中出现的MessageBox就可以了。通过这个BUG至少可以得出两点结论:

   1  必须学会使用try catch去捕获未知的错误,然后去查找相关的堆栈信息,然后一步步根据提示来解决问题。

   2  WCF程序中必须不能使用任何和窗体相关的类或者代码。

对于Web版本也会出现类似的问题(MessageBox。Show());
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐