c # - WCF - Service Reference ikke oprettes

Indlæg af Hanne Mølgaard Plasc

Problem



Min WCF-tjeneste fungerede korrekt, og så pludselig stoppede den med at arbejde. Jeg tror ikke, jeg har ændret noget med konfigurationen.


WCF-tjenesten er vært ved en windows service.


Hvad er mærkeligt, er, når jeg tilføjer servicereferencen, vil den identificere kontrakten og alle de eksponerede metoder. Men hvis jeg går til en browser, får jeg en 404-fejl, og kompilatoren opretter ikke tjenesten. Jeg har slettet og forsøgt at tilføje referencen igen uden held


Også mit implementerede program kan stadig få adgang til wcf-tjenesten.


Spørgsmål 1:
I en WCF windows service skal jeg kunne se wsdl i en browser (http://localhost: 8080/MaestroService/mex). I IE får jeg 400 dårlig forespørgsel. Jeg antager, at dette er roden til problemet.


Spørgsmål 2:
Er der noget andet?


app.config


<system.serviceModel>
<bindings>
  <basicHttpBinding>
    <binding name="NewBinding0" />
  </basicHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
  <behavior name="metadataAndDebug">
    <serviceMetadata httpGetEnabled="true" />
    <serviceDebug httpHelpPageEnabled="true" includeExceptionDetailInFaults="true" />
  </behavior>
</serviceBehaviors>
</behaviors>
<services>
  <service behaviorConfiguration="metadataAndDebug" name="MaestroServiceLibrary.MaestroService">
    <endpoint address="basic" binding="basicHttpBinding" bindingConfiguration="NewBinding0"
      name="basicHttp" contract="MaestroServiceLibrary.IMaestroService" />
    <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration=""
      contract="IMetadataExchange" />
    <endpoint address="net.tcp://localhost:8888/MaestroService" binding="netTcpBinding"
      bindingConfiguration="" name="netTcpBinding" contract="MaestroServiceLibrary.IMaestroService" />
    <endpoint address="net.pipe://localhost/MaestroService" binding="netNamedPipeBinding"
      bindingConfiguration="" name="netNamedPipeBinding" contract="MaestroServiceLibrary.IMaestroService" />
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8080/MaestroService" />
      </baseAddresses>
    </host>
  </service>
</services>






Fejl kompilering:


Custom tool error: Failed to generate code for the service reference 'MaestroService'.  Please check other error and warning messages for details.

Custom tool warning: Cannot import wsdl:binding


Detail: There was an error importing a wsdl:portType that the wsdl:binding is dependent on.


XPath til wsdl: portType://wsdl:definitions[[@targetNamespace='http://tempuri.org/']]/wsdl:portType[[@name='IMaestroService ']]
XPath til Fejlkilde://wsdl:definitions[[@targetNamespace='http://tempuri.org/']]/wsdl:binding[[@name='basicHttp ']]


Opdater


Jeg tænder sporing og jeg så dette:
Meddelelsen med 'http://localhost: 8080/MaestroService/mex/mex' kan ikke behandles hos modtageren på grund af en Adressefilter-fejlpasning ved EndpointDispatcher. Kontroller, at afsenderens og modtagerens EndpointAddresses er enige. Jeg vil opdatere dette spørgsmål, hvis jeg regner med det.


Opdater V2


Jeg gik til et andet projekt i samme løsning. Jeg kunne tilføje tjenesten der uden problemer. Jeg bemærker, at jeg brugte 3.5 i konsol app vs 4.0 i wpf browser appen. Da jeg kom tilbage til at rapportere dette, bemærkede jeg i min sidste opdatering, at den havde/mex/mex, selvom jeg lægger http://localhost: 8080/MaestroService/mex i url. Jeg prøvede bare http://localhost: 8080/MaestroService og det virker !!! [3] [4]


Til sidst sluttede jeg med at bruge Miguel Castro teknik, hvor du opretter koncepterne og proxyen. Det var godt at se, hvordan det virkelig virker, og hvad VS gør. Men det ville være godt at have den halvanden dag tilbage. [5]


tak for alle forslagene.

Bedste reference


Du kører som en windows service.


En Windows-tjeneste kører i sikkerhedskonteksten for en brugerkonto.


Hvis adgangskoden til brugerkontoen ændres eller udløber, kører tjenesten ikke.


Den første ting du bør tjekke er: Er tjenesten kørende.