Avatar billede danisher Nybegynder
12. oktober 2006 - 09:31 Der er 1 løsning

Remoting fra ASP.NET til C# Windows Service

Hejsa alle

Jeg har problemer med at få .NET Remoting til at virke fra en ASP.NET side til min Windows Service.

Jeg har lavet et projekt, som indeholder alle mine klasser til brug af Remoting. Der er en klasse, som har en statisk metode der hedder void SendMessage(...). Den opretter forbindelsen til den server, der ligger i konfigurationsfilen, og returnerer ellers bare. Indholder ser ca. sådan ud:

if (null == host)
{
    // Create an instance of the remote object
    host = Activator.GetObject(
    typeof(IValueMakrHost),
    "tcp://" + host + ":" + port.ToString(CultureInfo.InvariantCulture) + "/App") as IHost;
}

if (valueMakerHost != null)
    host.CreateWork(...);
else
    throw new RemotingException("Connection failed");

Hvis jeg benytter en windows applikation til at teste om det virker, kan jeg fint få forbindelsen, og min CreateWork bliver udført på normal vis.

Hvis jeg derimod benytter den statiske metode fra en ASP.NET side (i C#), så "fryser" den, når den går ind til host.CreateWork(...); Dvs. at den får et proxy objekt til servicen, men derefter kan jeg ikke få den til at afslutte kaldet.

host.CreateWork er implementeret således at den ikke skal stå og vente på noget. Den smider noget i en kø, hvorefter den returnerer. Jeg mener derfor ikke, at den fryser, fordi den skal vente på noget. Hvis bare den gjorde det, så var jeg glad :)

Men er der nogen der har en erfaring med at snakke Remoting fra ASP.NET til et remoting objekt på en Windows Service eller applikation?

Håber I kan hjælpe!

På forhånd tak!
Avatar billede danisher Nybegynder
13. oktober 2006 - 10:52 #1
Fandt selv en løsning!

Når serveren skal ligge objektet på listen, skal der benyttes en stump kode, således der aktiveres full trust på forbindelsen. Dette er åbenbart påkrævet, da ASP.NET åbenbart kører med full trust :)

BinaryServerFormatterSinkProvider serverProv = new BinaryServerFormatterSinkProvider();
serverProv.TypeFilterLevel = TypeFilterLevel.Full;

TcpServerChannel channel = new TcpServerChannel("Server", this.port, serverProv);
ChannelServices.RegisterChannel(channel, true);

RemotingConfiguration.RegisterWellKnownServiceType(
  typeof(Host),
  "AppNavn",
  WellKnownObjectMode.Singleton);

Håber det kan hjælpe nogen. Ellers kan I finde min artikel på min blog: clausn.dk, som jeg ligger ud snarest.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester