Как я могу сделать два процесса общения? - PullRequest
2 голосов
/ 19 июля 2011

У меня есть два приложения .net.Одним из них является обычное приложение Windows Forms, а другим - надстройка Microsoft Word COM.Я разрабатываю оба приложения с помощью C #.

Мне нужны эти два приложения, чтобы общаться друг с другом.Мне интересно, каков наилучший способ добиться этого.

Первое, что я подумал, это то, что я должен использовать двунаправленную именованную трубу для этого, но именованные каналы являются общесистемными, и мне нужноподключение должно быть ограничено выполнением процессов в одном сеансе (это может и будет использоваться на терминальном сервере).

Есть ли способ ограничить именованный канал текущим сеансом?Если нет, какие альтернативы у меня есть?

Спасибо

1 Ответ

0 голосов
/ 21 октября 2011

вы можете создать локальный веб-сервис для достижения этой цели.

Чтобы создать свой веб-сервис, вы должны сделать что-то похожее на:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;

namespace WebService1
{        
    /// <summary>
    /// Summary description for Service1
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    // [System.Web.Script.Services.ScriptService]
    public class Service1 : System.Web.Services.WebService
    {

        public int myInt = 0;

        [WebMethod]
        public int increaseCounter()
        {
            myInt++;
            return myInt;
        }

        [WebMethod]
        public string HelloWorld()
        {
            return "Hello World";
        }

    }
}

при запуске веб-службы вы должны увидеть что-то вроде:

enter image description here

в другой программе / потоке (в данном случае консольное приложение)

вы должны иметь возможность подключиться к этой услуге как:

enter image description here

enter image description here

enter image description here

Наконец введите URL только что созданной службы:

enter image description here

Теперь вы можете создать экземпляр объекта из этого класса Service1 из этого консольного приложения как:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication36
{
    class Program
    {
        static void Main(string[] args)
        {
            localhost.Service1 service = new localhost.Service1();

            // here is the part I don't understand..
            // from a regular class you will expect myInt to increase every time you call
            // the increseCounter method. Even if I call it twice I always get the same result.

            int i;
            i=service.increaseCounter();

            Console.WriteLine(i.ToString());

            // you can recive string data as:
            string s = service.HelloWorld();

            // output response from other program
            Console.WriteLine(s);

            Console.Read();


        }
    }
}

с помощью этой техники вы сможете передавать практически все, что угодно, в другое приложение (все, что можно сериализировать) так что, возможно, вы можете создать этот веб-сервис в качестве третьего потока, чтобы сделать его более организованным. Надеюсь, это поможет.

...