现在有一套C/S程序,安装在服务器上,这个程序提供相应的SDK,现在想通过web API的方式去操作
在同一台服务器IIS上部署一个站点(提供web api)
简单的就是说在同一台服务器上我的web程序能否通过sdk去操作客户端程序?
能否实现?是否可行?

解决方案 »

  1.   

    你需要开发桌面、控制台程序去调用所谓的 SDK。至于外网向内网通讯,前提是内网作为客户端先与外网服务器连接,然后进行高效率地双向通讯。这也是你需要学习的技术。
      

  2.   

    “服务器”通常是指在一个所有客户端都能主动发起连接的位置部署的主机,而“客户端”则是主动发起连接的,并且往往在下层 NAT 路由器之“下”部署。如果你说你的桌面程序或者控制台程序在你的 web 服务器上部署,那么其实你的那个 webapi 就可以通过 localhost 跟本地的桌面或者控制台程序通讯。可以使用tcp、udp、命名管道等等形式通讯。此时你说的“客户端”其实就是错误的了,你的 webapi 宿主网站显然是客户端,而你的桌面或者控制台程序才是服务器!这样的架构相对简单,但是要搞清楚(webapi宿主网站跟调用你的SDK的程序之间)哪个是服务器、哪个是客户端。
      

  3.   

    可能我没有描述清楚,其实就是在某台主机上,IIS部署了B/S的程序 ,来访问该主机的C/S程序
      

  4.   

    简单的就是说在同一台服务器上我的web程序能否通过sdk去操作客户端程序?这里写错了,应该是
    简单的就是说在同一台服务器上我部署的web程序能否通过sdk去操作C/S程序?
      

  5.   

    已经跟你说了,你的这个桌面程序(或者你另外开发的桌面程序)不是“客户端程序”,你的 webapi 要去作为客户端访问它而不是作为服务而等着它来访问,所以你起码要理顺这个基本方向。
      

  6.   

    建议先做个命令行或简单的winform程序来调用 sdk 访问 C/S 程序,如果这个功能可以实现,那么代码即可移植到webapi中,理论上区别只是运行账户变了
      

  7.   


    你应该是WebApi的服务器程序访问C/S的C部分,还是S部分?通过你的题干,应该是C部分吧,那你的C部分应该抽出一部分写成S,作为WebApi的服务器。
      

  8.   


    其实还是题目的“操作桌面程序”的意思。而且所谓“C/S程序的 SDK”,通常是指自己开发一个桌面程序或者控制台程序,然后调用SDK来访问它自己另外一套系统的 S 端。不过 lz 似乎也没有确定 SDK 到底是什么机制,所以他在“通过SDK来访问.....”上也是模糊。
      

  9.   

    假设其它系统的 SDK 是专为 asp.net 网站而设计的,那么可以在 asp.net 中直接调用 SDK 来访问另外一套系统的 S。但是假设你说这个 SDK 是专为所谓的 C/S 设计的,那么最好你还是自己开发一个桌面的或者控制台的程序来直接调用 SDK。而你的 asp.net 网站就是这个桌面或者控制台程序的客户端,那么你的 asp.net 网站的网页客户端就能通过2~3次 client 访问,先是b/s方式访问web服务器,然后c/s方式访问本地的桌面程序或者控制台程序,最后调用SDK 打开本地交互界面或者远程访问最终的 S 服务。
      

  10.   

    asp.net 程序是不是客户端的问题,这不是一个可以含糊的问题。其实故意含糊其辞正好说明了根本没有明白。对于普通的 asp.net 网站来说,你怎么让 asp.net 服务程序来“直接操作某个浏览器端网页”?你根本做不到!那么就更别说你用这个 asp.net 网站来“直接操作桌面程序”了。这其实是很直观的道理,是下一步进行深入一点的技术设计的必经之路,它不应该很困难。
      

  11.   


    你应该是WebApi的服务器程序访问C/S的C部分,还是S部分?通过你的题干,应该是C部分吧,那你的C部分应该抽出一部分写成S,作为WebApi的服务器。他说的是个不那么规范的叫法,管桌面程序叫C\S程序,web application 叫B\S 程序,这个说法国内很多地方都这么叫。
    所以,现在他的问题是通过 web application 的 服务端代码 调用 SDK 达到操作 桌面程序的目的
      

  12.   

    我现在也是这个思路,只是之前没接触过,想问下可行性,理论上的web程序 和 桌面程序 的代码是相通的,只是相关UI的程序调用是不可以的
    比如,web 程序不能显示个windows form,桌面程序也不能调用web 的Request / Response 等对象
    另外就是运行账户不同,桌面程序的运行账户是当前登录用户,而web 程序一般是配置在Application Pool里的(当然集成windows 身份验证的话也能实现当前登录用户)如果代码仅仅是个类库,I/O方面仅访问网络,那么是在 桌面程序和web程序中都可以用的。
      

  13.   

    通常“调用c/s程序SDK”的意思,就是调用其SDK达到将另一个桌面程序的窗体、组件嵌入自己的桌面程序或者控制台程序的目的。比如说你调用QQ的SDK(假设有的话)那么这个意思就是说你的程序可以把QQ窗体作为自己的程序窗体子窗体而操作,或者也可以不打开QQ窗体而直接调用其业务逻辑通讯部分去登录、加密收发信息等等操作。SDK其实就是深入嵌入到你自己进程的编程接口/组件,才叫做SDK。并不是说把QQ打开然后你的 asp.net 程序去调用SDK来跟QQ窗体互操作。这种就不叫做 SDK 了。再来看一个桌面程序,假设你用桌面程序访问你的 webapi,请问你的浏览器客户端怎么可能通过 asp.net 服务程序立刻把消息推送给桌面程序。这不就跟把消息通过 webapi
     想去直接推送给另一个浏览器客户端是同一个失败道理一样嘛!所以搞明白了谁是服务器、谁是客户端,自己就立刻找到编程依据了。这其实本来就是很简单的。
      

  14.   

    我们不管你的桌面程序提供什么形式的服务,哪怕它是承载 webapi 服务,那么你的浏览器客户端访问 web 服务器的 webapi,你的 webapi 再访问桌面程序的 webapi,也就是这个很简单的操作。
      

  15.   


    你应该是WebApi的服务器程序访问C/S的C部分,还是S部分?通过你的题干,应该是C部分吧,那你的C部分应该抽出一部分写成S,作为WebApi的服务器。他说的是个不那么规范的叫法,管桌面程序叫C\S程序,web application 叫B\S 程序,这个说法国内很多地方都这么叫。
    所以,现在他的问题是通过 web application 的 服务端代码 调用 SDK 达到操作 桌面程序的目的

    没错,我说的不是那么规范
    引起歧义了
    其实就是提供给第三方调用的web api 来操作本机安装的应用程序
      

  16.   

    不要执着webapi了,你的webapi就是一套数据传输,调用本地程序看你使用什么方式了。
    一般来说自定义 URL Scheme 就是很优秀的解决方案,但是需要写注册表,否则就是调用cmd这种比较容易但是安全性堪忧的。
      

  17.   

    你的“这个程序提供相应的SDK”是有歧意的,可能是个“坑”。一般来说,一个桌面系统的配套SDK是为了桌面或者控制台系统而设计的,是为了另外一个桌面或者控制台应用嵌入这个系统库、或者这个桌面应用软件嵌入另外一个桌面平台DLL而用的。你所谓的“通过sdk去操作桌面程序”这基本上也是自己乱猜,大概也是根本没有研究过这个 SDK 到底是什么,或者你也没有耐心按照人家的说明书去搞设计开发。
      

  18.   

    所以第一,先搞清楚你说的 SDK 的具体机制再说;第二,搞清楚 asp.net 网站在其中扮演的中间客户端角色。
      

  19.   

    web程序不能启动服务器上的软件,可以把你的CS程序改成服务,通过数据库或者什么东西与你的web程序一起工作
      

  20.   

    建议用webhook处理。具体可以网上找相关资料
      

  21.   

    Atitit web程序如何来直接操作桌面程序解决方案这个完全没问题的。也是比较常见的一种模式,特别在混合架构中,内部浏览器中的js需要调用后端语言宿主语言比如java c#.net来完成主要解决俩个问题即可。
    1.如何与后端交互??
    1.1.Ajax方案,缺点是体积较大,需要带个webserver
    优点是方便调试
    1.2.浏览器自定义window对象方案
    优缺点相反
    2.如何操作第三方客户端桌面程序
    2.1.优先使用其提供的api接口 包括com接口
    2.2.Cli命令行接口
    2.3.Gui接口3.综合所诉?如何web中的js调用操作iis
    Iis是提供com api接口的。。可以使用此接口即可。。
    那么不提供任何api和cli接口的第三方桌面程序怎么办??使用gui接口。。
      

  22.   

    此外直接修改iis的配置文件,也可,我记得貌似meta xml来了。。然后调用进程api重启iis即可
      

  23.   

    Atitit web程序如何来直接操作桌面程序解决方案这个完全没问题的。也是比较常见的一种模式,特别在混合架构中,浏览器控件中的js需要调用后端语言宿主语言比如java c#.net php node.js来完成
    1. 如何与后端交互?? 1
    1.1. Ajax方案,缺点是体积较大,需要带个webserver 1
    1.2. 浏览器自定义window对象方案 1
    1.3. 浏览器自定义函数注册方案 2
    1.4. Jsbridge 2
    1.5. 自定义Url协议模式 2
    2. 如何操作第三方客户端桌面程序 2
    2.1. 优先使用其提供的api接口 包括com接口 2
    2.2. Cli命令行接口 2
    2.3. Gui接口 2
    3. 综合所诉?如何web中的js调用操作iis 2
    3.1. Iis是提供com api接口的。。可以使用此接口即可。。 2
    3.2. 直接修改iis配置文件 然后重启iis 2
    4. IIS配置文件路径 Apache 配置文件路径 2
    5. 参考资料 3
    5.1. Atitit.web调用本地客户端 3
    5.2. IIS和Apache配置文件默认路径 - CSDN博客.html 4
    5.3. Atitit js nodejs下的进程管理wmic process进程管理 4
    主要解决俩个问题即可。
    1.如何与后端交互??
    1.1.Ajax方案,缺点是体积较大,需要带个webserver
    优点是方便调试
    1.2.浏览器自定义window对象方案
    优缺点相反1.3.浏览器自定义函数注册方案
    1.4.Jsbridge
    1.5.自定义Url协议模式
    2.如何操作第三方客户端桌面程序
    2.1.优先使用其提供的api接口 包括com接口
    2.2.Cli命令行接口
    2.3.Gui接口3.综合所诉?如何web中的js调用操作iis
    3.1.Iis是提供com api接口的。。可以使用此接口即可。。
    那么不提供任何api和cli接口的第三方桌面程序怎么办??使用gui接口。。
    3.2.直接修改iis配置文件 然后重启iis
    如遇配置文件锁定,可先停止iis。。 推荐通过cli接口使用wmic..exe来停止 重启操作进程
    重启iis需要调用进程api。。4.IIS配置文件路径 Apache 配置文件路径 
    IIS5.0默认配置文件路径
    C:\WINNT\system32\inetsrv\MetaBase.binIIS6.0默认配置文件路径
    C:\WINDOWS\system32\inetsrv\MetaBase.xmlIIS7.x默认配置文件路径
    C:\WINDOWS\system32\inetstr\config\applicationHost.configApache2默认配置文件路径
    /usr/local/app/apache2/conf/httpd.conf
     server.xml是Tomcat中最重要的配置文件
    5.参考资料
    5.1.Atitit.web调用本地客户端5.2.IIS和Apache配置文件默认路径 - CSDN博客.html
    5.3.Atitit js nodejs下的进程管理wmic process进程管理
      

  24.   

    直接访问肯定是不可能,我知道的有3 种形式,1 com 方式,2 可以把你的CS 程序做成一个servers 让bs 程序去调用 。3 用activex 程序去搞 。希望能帮助到你。
      

  25.   

    如果iis需要直接与桌面程序交互,那需要在服务中进行设置,允许与桌面程序交互。也可以通过与你的桌面程序进行socket通讯,内存共享之类的。简单说就是发消息给你的桌面程序,就像别人发qq消息给你一样。