Toon posts:

[C#] Embed DLL in webpagina werkt niet

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb het volgende probleem:

Op dit moment ben ik bezig om een zogenaamde shoutbox voor op een webpagina te maken. Deze shoutbox communiceert met een webservice en haalt daar om de paar seconden nieuwe berichten vandaan.

De shoutbox is een DLL welke ik in een aspx pagina embed op de volgende manier:
HTML:
1
2
3
<OBJECT 
    CLASSID="ShoutBox.dll#ShoutBox.ShoutBox" VIEWASTEXT>
</OBJECT>

Als ik lokaal de web-applicatie start (http://localhost/testmap/pagina.aspx) wordt de dll netjes geladen. Echter als ik dezelfde URL aanspreek via het netwerk (bijvoorbeeld http://pcnaam/testmap/pagina.aspx wordt de dll niet geladen. En verschijnt alleen een 'kruisje' op de plaats waar het component zijn gui zou moeten tonen.

Naar mijn idee was hiervan de oorzaak dat de dll bij de gebruiker welke de pagina opent niet geregistreert staat, dus wilde ik iets maken om de dll te registreren. Voor zover ik begrepen heb zou dit met behulp van een .CAB bestand moeten kunnen. Hierin zou ik de dll moeten plaatsen samen met een .inf bestand waarin de installatie stappen komen te staan.

Met behulp van het classid en de cab file zou ik het bestand moeten kunnen laten installeren bij de gebruiker op de volgende manier:
HTML:
1
2
3
4
<OBJECT 
    CLASSID="clsid:11D969C0-F192-12D3-A66F-0140963251D4"
    CODEBASE="http://pcnaam/testmap/ShoutBox.cab" VIEWASTEXT>
</OBJECT>

Het .INF bestand heb ik op de volgende manieren aangemaakt:
- handmatig
- INFTool.EXE (van internet gehaald)

Het Cab bestand heb ik op de volgende manieren aangemaakt:
- Package and Deployment in VS.NET
- Cabarc.exe (een tool van CAB SDK)

Na het openen van de URL wordt gevraagd of de gebruiker het cab bestand wil installeren, maar na het installeren wordt de Shoutbox niet getoond (weer het 'kruisje').

Hieronder de inhoud van een van de INF bestanden die volgens mij zou moeten werken:
code:
1
2
3
4
5
6
7
8
9
[Add.Code] 
ShoutBox.dll=ShoutBox.dll

[chatbar.dll] 
file-win32-x86=thiscab 
clsid={11D969C0-F192-12D3-A66F-0140963251D4} 
FileVersion=1.0.1959.22528
DestDir=11
RegisterServer=yes

Het lijkt mij dat het probleem in het inf bestand zit, want bij het genereren van het cab bestand lijkt mij dat er weinig fout kan gaan. Echter is dit .INF bestand niet erg ingewikkeld.

Iemand ideeen over wat er fout gaat?

Is het het INF bestand dat niet klopt?
Is de manier van laden misschien niet in orde?
of zou het probleem toch in de DLL kunnen zitten?

  • TeeDee
  • Registratie: Februari 2001
  • Nu online

TeeDee

CQB 241

Waarom include je die dll niet in (bijvoorbeeld) een code behind?
Zodra je dan je project compileert wordt die dll meegenomen, en klaar is de bunny.

Heart..pumps blood.Has nothing to do with emotion! Bored


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 04-05 14:55

Janoz

Moderator Devschuur®

!litemod

Lijkt me niet bepaald gebruikersvriendelijk(understatement) om mensen programma's te laten instaleren wanneer ze je sites bezoeken. Zedker ook omdat er voor een shoutbox legio wel vriendelijke oplossingen bestaan.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
Wanneer ik dat doe en met de volgende code het component probeer weer te geven, wordt er totaal niets getoond.

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using ShoutBox;

...
...
    ShoutBox.ShoutBox ch;       
        
    private void Page_Load(object sender, System.EventArgs e)
    {       
        ch = new ShoutBox.ShoutBox();
        ch.Left = 10;
        ch.Top  = 10;
        ch.Visible = true;              
        ch.Width = 432;
        ch.Height= 176;
        ch.Show();          
    }

Verwijderd

Topicstarter
Wat zou je in plaats van de huidige aanpak voorstellen?

Wellicht kan ik in de verleiding gebracht worden een andere aanpak te proberen.

Op deze manier leek het mij handig omdat de dan pagina niet steeds opnieuw geladen hoeft te worden als de gebruiker een bericht post.

[ Voor 34% gewijzigd door Verwijderd op 13-05-2005 15:50 ]


  • dotnetter
  • Registratie: Februari 2005
  • Laatst online: 06-10-2025

dotnetter

aka BamiSoep

Verwijderd schreef op vrijdag 13 mei 2005 @ 14:40:
De shoutbox is een DLL welke ik in een aspx pagina embed op de volgende manier:
HTML:
1
2
3
<OBJECT 
    CLASSID="ShoutBox.dll#ShoutBox.ShoutBox" VIEWASTEXT>
</OBJECT>
Probeer eens:
HTML:
1
2
3
<OBJECT 
    CLASSID="http:ShoutBox.dll#ShoutBox.ShoutBox" VIEWASTEXT>
</OBJECT>

| Allemaal spulletjes | Ik flickr! >Hier<


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 02-05 01:32
Uhm, heeft dit niet gewoon te maken met de security settings van je browser? Als je 'm lokaal wel kunt laden, dan werkt het in principe blijkbaar goed, maar het lijkt me tochdat zelfs Internet Explorer niet zomaar DLL's afkomstig van internet uitvoert. Je website toevoegen als trusted site zou dan moeten helpen.

  • foske
  • Registratie: Juli 2001
  • Laatst online: 22:55
Ik denk dat het xmlHttp object in javascript een goede oplossing is voor jou. Hiermee kan je verbinding maken naar een andere pagina/webserver en de data uitlezen. Gooi dit object samen met een timer object en je kan iedere 2 sec verbinding maken met de server om te kijken of er al nieuwe berichten zijn.

Als je het goed programmeerd, is het compatible met IEX6/FF/Safari en de nieuwste opera.

succes

Verwijderd

Topicstarter
Bedankt voor de ideeën,
Ik kan ze helaas alleen pas maandag op mijn werk uitproberen.

Ik had al geprobeerd met de security settings te spelen van de gebruiker, en ook al de site toegevoegd als trusted website, dit gaf helaas geen verandering in het resultaat.

Het idee van dotnetter ("http:" voor de dll) zou ik kunnen proberen, echter kan ik mij niet voorstellen dat dit zoveel verandering teweeg zou kunnen brengen. Aangezien de hele site opgevraagd wordt dmv http, wordt die DLL dan ook niet gewoon automatisch geopend met http? (lijkt mij logisch). Hoe dan ook proberen kan altijd.

Indien het http-idee niet werkt, ga ik het nieuwe idee eens proberen (xmlHttp). Ik heb al ergens wat voorbeelden gevonden waarmee het zou moeten lukken.

Verwijderd

Google op "Hosting .NET Applications in the Browser", je vindt dan onder andere deze pagina: http://www.15seconds.com/issue/030610.htm. Daar staat een voorbeeld van begin naar einde.
Ik heb het zelf niet uitgeprobeerd.

Edit:
In de voorbeelden staat overal "http:" voor de url, dus die suggestie is zo slecht nog niet...

[ Voor 22% gewijzigd door Verwijderd op 14-05-2005 18:04 ]


Verwijderd

Fossie schreef op zaterdag 14 mei 2005 @ 15:38:
Ik denk dat het xmlHttp object in javascript een goede oplossing is voor jou. Hiermee kan je verbinding maken naar een andere pagina/webserver en de data uitlezen.
Ik kan me vergissen, maar volgens mij kan je met xmlHttp geen verbinding maken naar een andere webserver.

Verwijderd

Topicstarter
Het idee van http heeft niet geholpen. Bij het starten van de pagina (niet localhost) krijg ik helaas security exceptions...

  • victorv
  • Registratie: Januari 2002
  • Laatst online: 17-02-2024

victorv

Locallost

Je beseft wel dat iedereen die jouw pagina met de shoutbox wil openen het .NET framework geinstalleerd moet hebben?

Ook zul je bij ELKE user .NET permissies moeten aanmaken speciaal voor jouw DLL, wil uberhaupt deze shoutbox architectuur gaan werken, want Code Access Security zal anders voorkomen dat deze DLL wordt uitgevoerd. Zie ook de .NET Configuratie MMC (Start | Run | "mscorcfg.msc").
.NET ziet namelijk dat deze assembly van internet wordt gedownload en bepaalt op basis van deze 'evidence' dat de assembly onder de InternetZone wordt geladen. De permissies van deze zone zijn heel beperkt, waardoor jouw assembly niet eens wordt gestart.

Het is niet nodig om deze 'client site .NET code' architectuur te gebruiken voor de shoutbox. Voorbeeld waarbij je dat wel nodig hebt: als je een pinapparaat wilt aansturen die aan de PC hangt waar de webpagina wordt geopend.
Het lijkt me dus raadzaam om met een server custom of user control (ASCX) te gaan werken. Hiermee 'belast' je de gebruiker van je pagina niet met .NET implementatie issues.

"Accomplishing the impossible means only that the boss will add it to your regular duties."


  • dotnetter
  • Registratie: Februari 2005
  • Laatst online: 06-10-2025

dotnetter

aka BamiSoep

Verwijderd schreef op dinsdag 17 mei 2005 @ 16:31:
Het idee van http heeft niet geholpen. Bij het starten van de pagina (niet localhost) krijg ik helaas security exceptions...
Het feit dat je een exception krijgt is een teken dat het beter werkt met http dan zonder (het is dan ook wel degelijk nodig). Die security exceptions krijg je waarschijnlijk omdat je code gebruikt in je shoutbox die niet in de beveiligingscontext van de browser mogen draaien (bijv de System.IO.File class).

Ik zou je aanraden eens goed op msdn te zoeken voor je verder gaat met dit project, waarschijnlijk zul je snel zien dat dit niet de beste optie is.

| Allemaal spulletjes | Ik flickr! >Hier<

Pagina: 1