积极答复者
请教C#下out-of-process COM服务器的完整实现示例或更好的解决办法

问题
-
实际情况:
公司项目中有一个C#的服务器程序(其实是整个服务器的一部分),要求带winform界面,对外公布webservice接口,对内需要通过TCP Socket访问服务器的另外一个程序。
我的理解:
对内通过TCP Socket访问服务器的另外一个程序容易实现,关键就是对外如何提供webservice接口。
我想到的解决办法是:做成带winform的out-of-process类型的COM服务器程序(EXE形式),再做一个in-of-process的COM(DLL形式),DLL形式的程序部署在本机上,调用EXE形式的out-of-process类型的COM服务器程序,然后,再做webservice,在webservice种调用DLL形式的COM。这样,外部只需要知道Webservice地址就可以访问了。
疑惑:
1、网上找的资料都是关于如何制作in-of-process的COM服务器,都是DLL形式的,带winform的out-of-process类型的COM服务器程序(EXE形式)资料很少,到目前为止,我还没完成EXE形式的COM服务器程序
2、这种方式,我以前在D6里实现过,并且一直这么用着,感觉还可以,但现在在.Net下了,是不是有更好的方式?
说明一下:我在.net下还想用webservice调用COM的这种形式,主要是想利用COM的事务以及并发控制。
请大侠们帮忙,最好有示例,万分感激!
这几天搞得头都大了,呵呵- 已移动 Sheng Jiang 蒋晟Moderator 2009年3月30日 19:17 WebService
答案
-
Hi,
你的问题我前几天注意了,但是今天才仔细看。
你描述的问题我接触过,进程外托管Web Service,这个代码确实现在难找。
我可以给你提供一些解决问题建议和如何查找资料:
1.你描述的问题和解决方法。我没记错的话,属于WSE的内容,在微软的WSE3.0相关的技术文章里可以查找的到。
现在的WCF托管宿主方式很多,很大程度上参考WSE3.0。WSE3.0其中就对托管Web Service提供了扩展,支持多种宿主类型。wcf以宿主程序而论,可以以ASP.NET,EXE,WPF,Windows Forms,NT Service,COM+作为宿主(Host),这个和WSE很相似.
2.WSE.示例代码里,有多种自定义宿主托管Web Service的示例,而你想要Windows Forms托管,只是界面不同,核心代码有参考价值。
3.WSE 3.0下载地址。下载并安装WSE 3.0,你可以选择安装Tools和Samples,开发环境选择Visual Studio 2005插件方式,开发过程中配置Web服务WSE 3.0特性会比较方便。
4.我整理过WSE3.0相关的技术文章。WSE3.0构建Web服务安全(1):WSE3.0安全机制与实例开发 ,你也可以参考一下里面有具体的安装WSE3.0的描述。这个SDK的下载和安装都有详细的描述。
有问题可以继续交流~希望我的回答有助于对你问题的解决~
you have a dream,you gonna protect it! http://www.cnblogs.com/frank_xl- 已标记为答案 Raymond TangModerator 2011年3月7日 14:09
-
看你的意思,你是想在你的winform程序中host webservice.
那我告诉你,最简单的方式就是用wcf来做你的webservice,wcf可以很方便的host在.exe中.
如果你不这么做,老徐介绍那个方案,我没看过,不过应该可行,就是麻烦点.
.net本身只支持进程内com组件,也就是进程内激活com,如果非要实现进程外com,那么你需要自己制作一个
com server,使用com server来激活com组件。这样的代价很高,实际上就是写个类似wcf的host.
com+主要用于分布式架构,这个是需要创建代理桩子的。在.net 使用remoting可以完全替代com+的功能。
com/com+本身是没法实现webservice接口的,跨机器的访问都是使用socket访问。
如果你是问ATL的问题,个人可以解答你很多关于com/com+/dcom方面的难题,
然而你问的是.net,所以我不得不推荐你选用wcf的方案,你的问题用wcf解决起来,超级简单。- 已标记为答案 Raymond TangModerator 2011年3月7日 14:09
全部回复
-
Hi,
你的问题我前几天注意了,但是今天才仔细看。
你描述的问题我接触过,进程外托管Web Service,这个代码确实现在难找。
我可以给你提供一些解决问题建议和如何查找资料:
1.你描述的问题和解决方法。我没记错的话,属于WSE的内容,在微软的WSE3.0相关的技术文章里可以查找的到。
现在的WCF托管宿主方式很多,很大程度上参考WSE3.0。WSE3.0其中就对托管Web Service提供了扩展,支持多种宿主类型。wcf以宿主程序而论,可以以ASP.NET,EXE,WPF,Windows Forms,NT Service,COM+作为宿主(Host),这个和WSE很相似.
2.WSE.示例代码里,有多种自定义宿主托管Web Service的示例,而你想要Windows Forms托管,只是界面不同,核心代码有参考价值。
3.WSE 3.0下载地址。下载并安装WSE 3.0,你可以选择安装Tools和Samples,开发环境选择Visual Studio 2005插件方式,开发过程中配置Web服务WSE 3.0特性会比较方便。
4.我整理过WSE3.0相关的技术文章。WSE3.0构建Web服务安全(1):WSE3.0安全机制与实例开发 ,你也可以参考一下里面有具体的安装WSE3.0的描述。这个SDK的下载和安装都有详细的描述。
有问题可以继续交流~希望我的回答有助于对你问题的解决~
you have a dream,you gonna protect it! http://www.cnblogs.com/frank_xl- 已标记为答案 Raymond TangModerator 2011年3月7日 14:09
-
看你的意思,你是想在你的winform程序中host webservice.
那我告诉你,最简单的方式就是用wcf来做你的webservice,wcf可以很方便的host在.exe中.
如果你不这么做,老徐介绍那个方案,我没看过,不过应该可行,就是麻烦点.
.net本身只支持进程内com组件,也就是进程内激活com,如果非要实现进程外com,那么你需要自己制作一个
com server,使用com server来激活com组件。这样的代价很高,实际上就是写个类似wcf的host.
com+主要用于分布式架构,这个是需要创建代理桩子的。在.net 使用remoting可以完全替代com+的功能。
com/com+本身是没法实现webservice接口的,跨机器的访问都是使用socket访问。
如果你是问ATL的问题,个人可以解答你很多关于com/com+/dcom方面的难题,
然而你问的是.net,所以我不得不推荐你选用wcf的方案,你的问题用wcf解决起来,超级简单。- 已标记为答案 Raymond TangModerator 2011年3月7日 14:09