当前位置:编程学习 > C#/ASP.NET >>

求助有关C#进程间通信的问题,急!

[size=14px]
我在本地计算机上用C#创建了一个窗体,名为Form1;又在该机上另建了一个webservice的服务,在这个服务里有个[webmethod]的方法叫Record()。现在另一台计算机想调用本地计算机webservice服务中的Record()方法,我想要这个方法一被调用,就发送一个消息给Form1窗体,启动该窗体中一个叫Store()的函数。
       我参考了网上有关句柄的方法,在webservice的服务的Record()里面我加了这么一段代码:
      
        [DllImport("User32.dll", EntryPoint = "FindWindow")]
        public static extern IntPtr FindWindow(string className, string windowName);
        [DllImport("User32.dll", EntryPoint = "SendMessage")]
        public static extern IntPtr SendMessage(IntPtr wnd, int msg,IntPtr wP,IntPtr lP);

        [webmethod]
        public string Record(string Data) 
        {
            ........
            
        IntPtr m = FindWindow(null, "Form1");
        SendMessage(m, 0x0100, (IntPtr)1, (IntPtr)0);        //0x0100是WM-KEYDOWN消息
        .......

        }

    在Form1我的代码是:

    private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
           int a = e.KeyValue;
            if(a==1)
        {
                Store();

         }
       }
    现在我遇到的问题是,(1)在VS2010中,直接在本机上按F5调试webservice,Form1可以接收到消息,并且执行相关操作,但是若还是在本机上的浏览器,通过输入webservice的地址来调用该服务,Form1得不到该消息,启动不了相关函数。
(2)另一台计算机上(其实是在一段程序中引用了该Webservice服务),不管是直接在程序中调用这个Webservice服务,还是在另一计算机上的浏览器中输入本地计算机Webservice服务的地址进行调用,本地计算机的Form1都得不到该消息,启动不了相关函数。
       各位专家,到底是哪儿出了问题啊?是另一计算机调用本地计算机的Webservice时,无法给另一窗体发消息?还是C#进程间的通信仅限于两不同窗体间,无法在窗体和Webservice之间??还是C#进程的通信仅限于同一计算机上,无法在计算机间?
       问题在哪儿??求助啊!请各位给出完整代码啊!!!
        或者为了达到“只要另一计算机一调用本地计算机创建的Webservice服务,就可以给本地计算机的另一窗体Form1发消息,启动该窗体的一个函数”的目的,还可以采取什么方法啊?求详尽代码!
[/size] C# 进程 通信 WebService 计算机 --------------------编程问答-------------------- webservice在IIS的账户中运行,无法接触到用户桌面上的窗口,更不可能获得窗口的内容。 --------------------编程问答-------------------- 设计有问题,应该重新考虑。

WebService 如果是中间平台的话, form1 应通过轮询 WebService 判断是否有发给 form1 的效率 --------------------编程问答-------------------- webservice是通过http协议调用的,并且运行在web服务器上,比如iis,也就是说你的 Record(string Data)是在iis所在的进程内调用的,而Record内部调用FindWindows等方法,只会找到iis所在计算机上的程序的窗体,也就是服务器上的窗体,而不是客户端的窗体,

所以关键是你的iis和Form1是否在同一个计算机上运行,如果是,则应该能得到消息,否则得不到消息, --------------------编程问答-------------------- 另外,同2楼,你这个设计显然是很不好的,我想不会得到你期望的结果,一个原则是不要在webservice中调用FindWindow之类的窗口API,因为webservice通常运行在服务器上,服务器通常不会运行任何窗口UI程序的,甚至都不会登陆,所以通常你FindWindow不会找到任何窗口,

这时候如果你想做进程通讯,应该使用socket之类的机制, --------------------编程问答--------------------
引用 3 楼 stonespace 的回复:
webservice是通过http协议调用的,并且运行在web服务器上,比如iis,也就是说你的 Record(string Data)是在iis所在的进程内调用的,而Record内部调用FindWindows等方法,只会找到iis所在计算机上的程序的窗体,也就是服务器上的窗体,而不是客户端的窗体,

所以关键是你的iis和Form1是否在同一个计算机上运行,如果是,……


我的iis和Form1是在同一个计算机上运行的啊!

--------------------编程问答--------------------
引用 4 楼 stonespace 的回复:
另外,同2楼,你这个设计显然是很不好的,我想不会得到你期望的结果,一个原则是不要在webservice中调用FindWindow之类的窗口API,因为webservice通常运行在服务器上,服务器通常不会运行任何窗口UI程序的,甚至都不会登陆,所以通常你FindWindow不会找到任何窗口,

这时候如果你想做进程通讯,应该使用socket之类的机制,
       ……


能给点详细代码吗
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,