Frage

Ich erhalte eine sehr hilfreich Communication bei dem Versuch, einen WCF-Dienst von Silverlight 3. Die Botschaft der Ausnahme zu nennen ist „Der Remoteserver hat einen Fehler zurückgegeben:. NotFound“ Jede innere Ausnahme Papageien, die gleiche Botschaft. Gibt es ein Problem mit meinem Setup, die dieses Problem verursachen könnten?

Hier ist mein Setup. Der WCF-Dienst in einem Windows-Dienst läuft auf .NET 4.0-Plattform gehostet. Es hat drei Endpunkte:

  • Der Hauptendpunkt verwendet eine pollingDuplexHttpBinding Bindung und hat die Adresse „DashboardService“
  • Der Austausch von Metadaten Endpunkt verwendet eine mexHttpBinding Bindung und hat die Adresse „mex“
  • Die Politik bietet Endpunkt (diese Bedürfnisse Cross-Domain-Anrufe ermöglichen) verwendet eine webHttpBinding Bindung und hat die Adresse „“.

Hier ist der ganze system.serviceModel Abschnitt:

<system.serviceModel>
    <extensions>
      <bindingExtensions>
        <add name="pollingDuplexHttpBinding" type="System.ServiceModel.Configuration.PollingDuplexHttpBindingCollectionElement, System.ServiceModel.PollingDuplex, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
      </bindingExtensions>
    </extensions>
    <behaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="PolicyProviderBehavior">
          <webHttp/>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <services>
      <service name="RoboTrader.TheFloor.DashboardService">
        <endpoint address="" binding="webHttpBinding"
          behaviorConfiguration="PolicyProviderBehavior"
          contract="RoboTrader.DashboardService.IPolicyProvider"/>
        <endpoint address="DashboardService" binding="pollingDuplexHttpBinding"
          contract="RoboTrader.DashboardService.IDashboardService"/>
        <endpoint address="DashboardService/mex" binding="mexHttpBinding" 
          contract="IMetadataExchange" />
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8732/" />
          </baseAddresses>
        </host>
      </service>
    </services>
</system.serviceModel>

In dem Silverlight-Client-Code, fügte ich einen Dienstverweis, und das scheint ganz gut gearbeitet zu haben. Und der Kunde holt die domänenübergreifende Politik auf den Dienst, wie erwartet. Allerdings, wenn ich die wichtigsten DashboardService Methoden aufrufen, erhalte ich die Communication, und ein Haltepunkt in meinem serverseitige Methode wird nie erreicht. Hier ist die Silverlight ClientConfig Datei durch Hinzufügen der Dienstverweis generiert:

<system.serviceModel>
    <bindings>
        <customBinding>
            <binding name="PollingDuplexHttpBinding_IDashboardService">
                <binaryMessageEncoding />
                <httpTransport maxReceivedMessageSize="2147483647"
                  maxBufferSize="2147483647" />
            </binding>
        </customBinding>
    </bindings>
    <client>
        <endpoint address="http://localhost:8732/DashboardService" 
            binding="customBinding"
            bindingConfiguration="PollingDuplexHttpBinding_IDashboardService"
            contract="Service.IDashboardService" 
            name="PollingDuplexHttpBinding_IDashboardService" />
    </client>
</system.serviceModel>

Gibt es Probleme mit diesem Setup, oder gibt es weitere Dinge, die ich tun müssen, um eine Abfrage zu erhalten Duplex-HTTP-Bindung an die Arbeit? Oder haben Sie zumindest wissen, wie kann ich mehr Informationen darüber, was das Problem ist?

Edit:

Ich habe gerade versucht, stattdessen die Client- und Server-Bindungen durch Code-Einstellung zu sehen, ob es helfen würde, aber ich habe immer noch die gleiche Ausnahme. Hier ist der Server-Code:

var dboardService = new DashboardService();
ServiceHost host = new ServiceHost(dboardService);
host.AddServiceEndpoint(
    typeof(IDashboardService),
    new CustomBinding(
        new PollingDuplexBindingElement(),
        new BinaryMessageEncodingBindingElement(),
        new HttpTransportBindingElement()),
    "DashboardService");
host.Open();

Und hier ist der Client-Code:

private IDashboardService _svc = new DashboardServiceClient(
    new PollingDuplexHttpBinding(),
    new EndpointAddress("http://localhost:8732/DashboardService"));

Edit 2:

Ich habe versucht, den Client-Code auf diese zu ändern, aber das gleiche Problem tritt auf:

private IDashboardService _svc = new DashboardServiceClient(
    new CustomBinding(
        new PollingDuplexBindingElement(),
        new BinaryMessageEncodingBindingElement(),
        new HttpTransportBindingElement()),
    new EndpointAddress("http://localhost:8732/DashboardService"));
War es hilfreich?

Lösung

Sie haben mich Gotta be kidding! Ich fand den Grund, warum dies nicht den Titel in einem MSDN-Artikel Arbeits

Nach meiner Portnummer 4505 zu ändern, wurde der Server-Code erreicht nach einer Anfrage von Silverlight zu machen.

Andere Tipps

versuchen, den Endpunkt durch den Code zu schaffen, genau die gleiche Art und Weise Sie es jetzt tun. Aber auf der Client-Seite erstellen Sie den Proxy wie so.

CustomBinding binding = new CustomBinding(
                new PollingDuplexBindingElement(),
                new BinaryMessageEncodingBindingElement(),
                new HttpTransportBindingElement());


private IDashboardService _svc = new DashboardServiceClient(binding,
   new EndpointAddress("http://localhost:8732/DashboardService"));
scroll top