当应用程序不是以UserInteractive 模式运行时显示模式对话框或窗体
来源:互联网 发布:淘宝第四层级金额 编辑:程序博客网 时间:2024/06/05 08:41
最近在做一个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());
- 当应用程序不是以 UserInteractive 模式运行时显示模式对话框或窗体是无效操作。
- 当应用程序不是以UserInteractive 模式运行时显示模式对话框或窗体
- "当应用程序不是以 UserInteractive 模式运行时显示模式对话框或窗体是无效操作。请指定 ServiceNotification....."的解决方案
- 当应用程序不是以UserInteractive模式运行
- linux下php以fastcgi模式运行-mod_fcgid,不是mod_fastcgi
- 非顶级窗体不能显示为模式对话框错误原因
- win8/10上的应用程序怎样以兼容模式运行?
- 窗体的模式显示
- 说说在CMD命令行模式下ADB命令显示为不是内部或外部命令,亦不是可运行程序和批处理文件的解决办法
- VB弹出窗体提醒"模式窗体显示时不能显示非模式窗体"
- 显示模式对话框实例
- 在运行时显示或隐藏窗体的标题栏
- 当不可信小应用程序或应用程序在 Web 浏览器中运行时,我应当如何控制?
- 以命令模式运行ubuntu
- 显示非模式对话框实例
- 在打开有模式窗体后还能"显示"无模式窗体
- 在MFC对话框中显示另外一个应用程序窗体
- 程序运行时当你按Alt+Tab时不显示你的这个窗体程序
- sql server驱动及url问题
- [HAOI2007]理想的正方形
- UVA 714Copying Books
- 移动APP漏洞自动化检测平台建设
- python编码问题总结
- 当应用程序不是以UserInteractive 模式运行时显示模式对话框或窗体
- Fence Repair
- Javascript单例模式
- spring boot 入门
- Linux 守护进程创建
- rabbitmq一个节点无法加入集群的排查-(inconsistent_cluster)
- [iOS]网络之NSURLSession的文件下载
- 课堂练习3: 定义一个平面中的Circle类
- Tyvj3980(dp+priority_queue)