none
请教,关于WebService服务器 RRS feed

  • 问题

  • 整个系统:
          客户端程序------(Webservice)------服务器程序---------(GPRS、串口等)---------专有设备

    客户端程序:C#开发,可能是winform形式的,也可能是webform形式的
    服务器程序:C#开发,winform形式的EXE程序(因业务需要,这里只能是这种形式)

    需求:客户端通过调用部署在服务器端的webservice接口,发送数据(与专有设备之间的协议命令)给服务器,服务器通过GPRS或串口转发协议命令至专有设备,专有设备响应后,返回数据给服务器,服务器再返回给客户端,完成一次调用。

    问题:webservice如何与部署在同一机器上的服务器程序(C#开发,winform形式的EXE程序)进行通讯,或者说,webservice如何调用服务器程序(C#开发,winform形式的EXE程序)发送协议命令??

    请高手指点
    谢谢

    2009年4月2日 10:35

答案

全部回复

  • 你好!
         你在你的项目里直接添加那个WebService作为Web引用,直接就可以通过代理来使用WebService里面的类了!
    周雪峰
    2009年4月2日 10:40
    版主
  • 周雪峰老师 你好
    没想到这么快就有回复了,呵呵

    "通过代理来使用WebService里面的类" 这句不是很理解,请解释一下好吗

    2009年4月2日 10:48
  • 好的,我详细说一下:

    为简化 XML Web services 客户端应用程序的开发,Visual Studio 提供了 Web 引用。Web 引用与传统的引用和组件不同;Web 引用不引用安装在本地计算机上的组件或类库,而是提供对特定资源的访问,这种资源是通过 Internet 协议(如 SOAP 或 HTTP)提供的。

    实际上,Web 引用是一个生成的代理类,它在本地表示 XML Web services 所公开的功能。该代理类定义的方法表示 XML Web services 所公开的实际方法。应用程序如果创建了该代理类的一个实例,就可以调用 XML Web services 方法,就好像 XML Web services 是一个本地可用的组件一样。
    具体方法参考这里:
    http://msdn.microsoft.com/zh-cn/library/6h0yh8f9(VS.80).aspx
    周雪峰
    2009年4月2日 11:22
    版主
  • 周雪峰老师 你好

    我明白你的意思了,你说的是如何在winform里调用webservice服务

    但我需要的是,我已经有一个exe程序(windows 应用程序)了,这个exe程序需要对外提供webservice接口,好让客户端通过这个webservice接口来使用exe程序所提供的服务
    2009年4月2日 11:34
  • WebService本身就可以对外提供服务了,为什么还要通过Windows应用程序来提供服务呢?
    周雪峰
    2009年4月2日 12:14
    版主
  •       因为我们需要通过GPRS与专有设备通讯,专有设备需要通过tcp与我们的程序建立连接,其实我们的exe就是socket服务器端,专有设备是socket客户端,设备登陆上来后,我们的exe程序才能与设备通讯,所以这个exe程序是要长期运行着的,保持与设备之间的tcp连接。

          同时,我们这个exe程序又需要对客户端提供服务,即提供与设备通讯的服务。我们的想法是这个exe程序又能向客户端提供webservice服务。
    2009年4月2日 12:40
  • web service是通过http发送SOAP协议的数据。如果你需要使用其他通讯方式或者数据格式,需要自己编写代码。
    举例来说,你可以用web service把数据发送到服务器端的一个队列(一般用数据库保存),而服务器端另外一个程序则轮询这个队列,决定是否用socket发送数据。

    MSMVP VC++
    2009年4月2日 18:14
    版主
  • 蒋老师您好,

          很感谢您的回复。

          但我想您误会我的意思了。

          我的情形是这样的:

                有一个C#开发的exe程序(server.exe)长期运行着,接受类似于手机的设备通过GPRS登陆上来,这样server.exe就能与安装在现场的设备取得通讯了。整个系统中,server.exe是唯一一个能与设备直接通讯的程序。

                现在需要开发一个客户端程序client.exe,提供控制安装在现场的设备的功能,即发送一些命令到设备,或者从设备读回来一些数据。

                这样,问题就产生了:client.exe怎么把命令发送给server.exe从而发送到现场设备呢?我首先想到的是webservice,在安装server.exe的机器上部署webservice,client.exe只要访问webservice就可以了。但webservice本身其实是无法与现场设备通讯的,它得把命令“通过某种方式”发送给server.exe,由server.exe发送给现场设备,然后把设备的响应的数据返回给webservice,这样,客户端就能间接的与设备通讯了。
                上面的“通过某种方式”就是我需要的,我不知道在.net里,可以使用什么方式。之前,我用delphi,可以让server.exe程序拥有一套COM接口,即导出一个.tlb文件,这样,webservice引用这个.tlb文件,就可以像访问COM+组件一样的方式来调用server.exe了。

                不知道我说清楚了没有,期待您的回复,还有周雪峰老师。

            
          

    2009年4月3日 3:15
  • 我不是说得很清楚么?可以用数据库作为通讯方式,一个程序写,另一个程序读。
    MSMVP VC++
    2009年4月3日 3:59
    版主
  • 蒋老师您好,
     
    您说的这种方式可以实现我的需求,但比较麻烦。

    我网上找过一些资料,关于.net中引用excel(http://www.cnblogs.com/skywind/archive/2008/06/16/1222992.html

    其实我想做的就是这个带COM接口的excel。但在.net好像没法实现(当然很有可能是我不会)
    2009年4月3日 6:46
  • 您好  您的要求可以通过配置  wcf组件实现    wcf 可以直接在  exe文件中建立  webservice
    工作突然有点忙 嘿嘿
    2009年5月6日 2:03
    版主
  • 但是他使用的不是wcf啊!
    周雪峰
    2009年5月6日 2:18
    版主
  • wcf可以在任何windows程序中建立服务
    3.5时代的 remoting
    工作突然有点忙 嘿嘿
    2009年5月6日 7:51
    版主