Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > проблема с System.Runtime.Remoting.Channels.HTTP


Автор: tigrik 12.7.2006, 19:44
при попытке компилировать код на линуксе с моно выходит следующая ошибка: 

"The type or namespace name `HTTP' does not exist in the namespace `System.Runtime.Remoting.Channels'. Are you missing an assembly reference?"


Код

using System;
using System.IO;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels.HTTP;
namespace Server
{
   public class ServiceClass : MarshalByRefObject {
      public void AddMessage (String msg)
  {
         Console.WriteLine (msg);
  }
}
public class ServerClass
{
  public static void Main ()
  {
    HTTPChannel c = new HTTPChannel (1095);     ChannelServices.RegisterChannel (c);
    RemotingServices.RegisterWellKnownType ("Server","Server.ServiceClass","ServiceClass",WellKnownObjectMode.Singleton);
    Console.WriteLine ("Server ON at 1095");
     Console.WriteLine ("Press enter to stop the server...");
     Console.ReadLine ();
  }
 }
}


  

Автор: Kefir 12.7.2006, 19:59
Этот класс реализован в System.Runtime.Remoting.dll. Прикрути его к проге и посмотри что тогда будет.  smile  

Автор: tigrik 12.7.2006, 20:22
а как прикрутить?

я попробовала с:

mcs -r:System.Runtime.Remoting.dll Server.cs

не работает :-( 

Автор: Kefir 12.7.2006, 20:27
а что значит 
Цитата(tigrik @  12.7.2006,  12:22 Найти цитируемый пост)
не работает :-(  

как неработает? 

Автор: tigrik 12.7.2006, 20:36

думаю что длл он находит, т.к. если делаешь ошибку в имени то он говорит что не нашел

а так :
mcs Server.cs

или так:

mcs -r:System.Runtime.Remoting.dll Server.cs

 выдает одинаковую ошибку  

Автор: arilou 12.7.2006, 22:04
tigrik, мне так кацца что ты используешь Mono, или я не прав? 

Автор: arilou 12.7.2006, 22:22
Там нету System.Runtime.Remoting.Channels.HTTP 

Автор: mr.DUDA 13.7.2006, 09:33
Цитата(arilou @  12.7.2006,  22:04 Найти цитируемый пост)
tigrik, мне так кацца что ты используешь Mono, или я не прав? 


Цитата(tigrik @  12.7.2006,  19:44 Найти цитируемый пост)
при попытке компилировать код на линуксе с моно выходит следующая ошибка: 

 smile  

Автор: tigrik 13.7.2006, 14:57
да, моно...

мне нужно просто вызвать функцию от удалённого объекта
подскажите как это можно сделать с моно чтобы на линуксе шло
(клиент и сервер)

а то не один пример что я нашла невозможно закомпилировать :-( 

Автор: arilou 13.7.2006, 20:15
tigrik, переходи с Remoting на web-services, и тогда все заработает. 

Цитата(mr.DUDA @  13.7.2006,  09:33 Найти цитируемый пост)
Цитата(arilou @  12.7.2006,  22:04 )
tigrik, мне так кацца что ты используешь Mono, или я не прав? 
Цитата(tigrik @  12.7.2006,  19:44 )
при попытке компилировать код на линуксе с моно выходит следующая ошибка: 

Е-мое, в отпуске глаз замылился  smile Я по имени компилятора догадался  smile  

Автор: tigrik 15.7.2006, 22:58
ок, пример я домучила - теперь компилируется

сервер:

Код

using System;
using System.IO;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels.Http;
//using System.Runtime.Remoting;
namespace NetSearchServer
{

   public class ServiceClass : MarshalByRefObject {
      public void AddMessage (String msg)
  {
         Console.WriteLine (msg);
  }
}
public class ServerClass
{
  public static void RunServer ()
  {
    HttpChannel c = new HttpChannel (1095);   
    System.Runtime.Remoting.Channels.ChannelServices.RegisterChannel (c);
    System.Type type=typeof(ServiceClass);
    System.Runtime.Remoting.RemotingConfiguration.RegisterWellKnownServiceType(type,"ServiceClass",WellKnownObjectMode.Singleton);
    Console.WriteLine ("Server ON at 1095");
    Console.WriteLine ("Press enter to stop the server...");
    Console.ReadLine ();
  }
 }
}



клиент:

Код

using System;
using System.IO;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels.Http;
using NetSearchServer;


namespace NetSearchClient
{
    class NetClient
    {
        public static void RunClient()
        {
                ServiceClass obj = (ServiceClass) Activator.GetObject(typeof(ServiceClass),
                        "http://localhost:1095/ServiceClass");
            obj.AddMessage("Hello from Client");
  }
    }
    
    
}


arilou
Цитата(arilou @  13.7.2006,  19:15 Найти цитируемый пост)
tigrik, переходи с Remoting на web-services, и тогда все заработает. 


а в чем конкретно недостатки Remoting?
и, если не затруднит, хотелось бы примерчик с web-services  

Автор: mr.DUDA 16.7.2006, 03:48
Пару замечаний:

1) Если по-честному, весь вышеприведённый код мог быть заменён на 2-3 строчки на сервере и клиенте, плюс .config-файлы с настройками.
2) Web-сервис в .NET представляет собой обычный класс, помеченный атрибутом [WebService] (или же унаследованный от класса WebService), и содержащий хотя бы один метод, помеченный атрибутом [WebMethod]. Для того, чтобы клиенту можно было вызвать веб-метод, нужно опубликовать веб-сервис на любом сервере (хотя бы на localhost) и с помощью утилиты wsdl.exe сгенерировать прокси-класс. Далее, клиент просто создаёт экземпляр прокси-класса, заполняет свойство Url и вызывает метод веб-сервиса. Как вариант, прокси-класс можно сгенерировать командой "Add Web Reference" в IDE Visual Studio или #Develop. 

Автор: tigrik 16.7.2006, 14:05
ok, попробую.

допустим:

сервер:
Код


public class WebService : System.Web.Services.WebService
{
    [WebMethod]
    public void AddMessage (String msg)
   {
         Console.WriteLine (msg);
   }
}


вопрос: что именно кладется на сервер? насколько я поняла чтобы сгенерировать прохи надо иметь WSDL файл..
кто его генерирует?

  

Автор: mr.DUDA 16.7.2006, 14:58
Цитата(tigrik @  16.7.2006,  14:05 Найти цитируемый пост)
вопрос: что именно кладется на сервер? насколько я поняла чтобы сгенерировать прохи надо иметь WSDL файл..

На сервер кладём .asmx-файл и скомпилированную DLL в папку bin.
WSDL-описание автоматом генерируется сервером, если зайти по линку на .asmx-файл и добавить в запрос:   ?wsdl 

Автор: tigrik 18.7.2006, 01:24
ок, wsdl  у меня сгенерировался, 
только с очень большим трудом после долгой и упорной настройки апаче

каким веб-сервером лучше для этого пользоваться? Он должен обязательно работать на линуксе...

 

Автор: mr.DUDA 18.7.2006, 08:59
Можно апач, можно XSP:
Цитата
XSP is a standalone web server written in C# that can be used to run your ASP.NET applications with minimal effort. XSP works under both the Mono and Microsoft runtimes. The code is available from our download page (look for XSP web server) or from the Anonymous SVN repository (module name: xsp). 

The easiest way to start XSP is to run it from within the root directory of your application. It will serve requests on port 8080. Place additional assemblies in the bin directory. Other XSP options can be set on the command line, such as the application directory and the port to listen on. 

XSP comes with a set of pages, controls and web services that you can use to test the server and see what ASP.NET looks like. 

For example, once you install XSP, you can try some samples like this: 

 $ cd /usr/lib/xsp/test
 $ xsp
 Listening on port: 8080
 Listening on address: 0.0.0.0
 Root directory: /home/cvs/mcs/class/corlib/Microsoft.Win32
 Hit Return to stop the server.

You can now browse to http://localhost:8080 and see various sample programs


http://www.mono-project.com/ASP.NET 

Автор: tigrik 18.7.2006, 12:28
mr.DUDA, большое спасибо за помощь :-)
сейчас попробую XSP  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)