[C#] Probleem met mex endpoint in wcf

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Kayshin
  • Registratie: Juni 2004
  • Laatst online: 09-03-2018

Kayshin

Bl@@T @@P!!!

Topicstarter
Ik zit met het volgende probleem:

Ik heb een testapplicatie in WCF om te kijken of ik een duplexverbinding aan het werken krijg. Via een http endpoint werkt dit en ook als ik het endpoint in de code aanmaak is er geen probleem. Ik wil nu echter de endpoints in mijn app.config zetten maar dit wil niet werken. Ik krijg de volgende error:

{"Could not connect to net.tcp://localhost:9000/. The connection attempt lasted for a time span of 00:00:02. TCP error code 10061: No connection could be made because the target machine actively refused it 127.0.0.1:9000. "}

Hoe het eerst was en werkte (in code)
C#:
1
2
3
4
5
6
7
8
9
10
Uri baseNetTcpAddress = new Uri("net.tcp://localhost:9000");
ServiceHost host = new ServiceHost(typeof(PingService), new Uri[] { baseNetTcpAddress });
ServiceMetadataBehavior metadataBehavior = new ServiceMetadataBehavior();
host.Description.Behaviors.Add(metadataBehavior);
System.ServiceModel.Channels.Binding mexTcpBinding =
System.ServiceModel.Description.MetadataExchangeBindings.CreateMexTcpBinding();

host.AddServiceEndpoint(typeof(IMetadataExchange), mexTcpBinding, "mex");
host.AddServiceEndpoint(typeof(IOrderPizza), new NetTcpBinding(SecurityMode.None, true), string.Empty);
host.Open();


Hoe het nu in de config staat en niet werkt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      <service name="Orderpizza" behaviorConfiguration="metadataBehavior">
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://localhost:9000"/>
          </baseAddresses>
        </host>
        <endpoint name="DuplexNetTcpBindingTest.netTcpBinding"
                  address=""
                  binding="myBinding"
                  contract="DuplexNetTcpBindingTest.IOrderPizza"
                   />
        <endpoint name="DuplexNetTcpBindingTest.mexTcpBinding"
                  address="mex"
                  binding="mexTcpBinding"
                  contract="IMetadataExchange"
                   />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="metadataBehavior">
          <serviceMetadata/>
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <bindings>
      <netTcpBinding>
        <binding name="myBinding">
          <security mode="None">
            <message clientCredentialType="None"/>
          </security>
        </binding>
      </netTcpBinding>
    </bindings>
  </system.serviceModel>
</configuration>


Ik heb al verschillende dingen geprobeerd, firewall uitzetten, security mode staat al uit, het wil niet lukken.

Iemand een suggestie?

My personal videoteek: -Clique-; -NMe- is een snol!


Acties:
  • 0 Henk 'm!

  • jmzeeman
  • Registratie: April 2007
  • Laatst online: 08-09 07:36
Doe je wel nog steeds host.open in je C# code (of in dit geval eigenlijk moet het Orderpizza.open zijn volgens mij). Post anders ook even hoe je nu de service start vanuit C#.

Acties:
  • 0 Henk 'm!

  • Kayshin
  • Registratie: Juni 2004
  • Laatst online: 09-03-2018

Kayshin

Bl@@T @@P!!!

Topicstarter
Ik start op het moment de service (console app) door gewoon op f5 te duwen :P

En hoe bedoel je of ik de host open? Is het niet het geval dat hij dit zelf doet dan of heb ik nu een fatale fout gemaakt XD

My personal videoteek: -Clique-; -NMe- is een snol!


Acties:
  • 0 Henk 'm!

  • jmzeeman
  • Registratie: April 2007
  • Laatst online: 08-09 07:36
Nee je configureerd hem alleen in je app config je moet hem daarna nog wel even starten vanuit je code. Als het goed is veschijnt er een klasse met de naam zoals je die in je app config hebt gedefineerd deze kan je instantieren en hierop kan je dan open of iets dergelijks aanroepen. (Heb deze denkfout laatst zelf ook gemaakt)

Acties:
  • 0 Henk 'm!

Verwijderd

Dit soort fouten kun je het beste analyseren dmv WCF tracing.
Activeer WCF tracing, probeer het nogmaals en bekijk dan het tracebestand om te zien wat er fout gaat en waar.

WCF tracing activeren doe je door in de config file van je service host de volgende secties op te nemen:

in de <configuration> node:
XML:
1
2
3
4
5
6
7
8
9
10
11
  <system.diagnostics>
    <sources>
      <source name="System.ServiceModel" switchValue="Information, ActivityTracing">        
        <listeners>
          <add name="xmlTrace" type="System.Diagnostics.XmlWriterTraceListener"
               initializeData="(pad)\ServiceTrace.svclog" />
        </listeners>
      </source>
    </sources>
    <trace autoflush="true" />
  </system.diagnostics>


en in
XML:
1
2
3
4
5
6
<system.serviceModel>
<diagnostics>
      <messageLogging logMessagesAtTransportLevel="true" logMessagesAtServiceLevel="true"
           logMalformedMessages="true" logEntireMessage="false" maxSizeOfMessageToLog="10000000" 
           maxMessagesToLog="500"  />
</diagnostics>


Gebruik vervolgens de WCF Trace viewer om het gegenereerde bestand te bekijken. Deze kun je vinden in \Program Files\Microsoft SDKs\Windows\v6.0A\bin\SvcTraceViewer.exe

(deze kun je het beste in de visual studio IDE importeren als external tool)

succes

[ Voor 1% gewijzigd door RobIII op 10-02-2010 22:54 . Reden: Code-tags ;) ]


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Ik zie hier een sterke parallel met dit probleem. mexTcpBinding is blijkbaar onhandig in combinatie met port sharing. :)
offtopic:
Overigens heb ik je code even in pedorus in "\[C#][discussie] Lekker veel var gebruiken?" gebruikt.

[ Voor 24% gewijzigd door pedorus op 11-02-2010 22:56 ]

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • Hardcell
  • Registratie: November 2004
  • Laatst online: 03-02-2023
Je config is gewoon verkeerd. Je moet in het eerste endpoint (DuplexNetTcpBindingTest.netTcpBinding) bij binding "netTcpBinding" zetten en dan bindingConfiguration="myBinding". Je definieert beneden namelijk een binding configuration en niet je eigen custom binding.

Verder is het handig de naam van je endpoint op "Endpoint" te laten eindigen i.p.v. op "Binding" maar dat terzijde..
Pagina: 1