Frage

ich meinen WCF-Dienst habe, habe ich Verweis darauf aus MSTest Projekt erstellt. Hier ist beispielsweise, wie ich Service-Methoden nenne:

IEnrollmentService serviceClient = ChannelFactory<IEnrollmentService>
    .CreateChannel(new BasicHttpBinding(),
                   new EndpointAddress("http://localhost/EnrollmentService.svc"));

PublishResult res = serviceClient.PublishEnrollmentProfile(...);

Statt der Ausführung habe ich die folgende Fehlermeldung anzeigt:

Der Inhaltstyp application / xml; charset = UTF-8 der Antwortnachricht nicht die Art des Inhalts des Spiels Bindung (text / xml; charset = UTF-8). Wenn mit einem benutzerdefinierten Encoder, sicher sein, dass die Methode ist IsContentTypeSupported ordnungsgemäß umgesetzt werden. Die erste 710 Bytes der Antwort war: ‚Sendera:ActionNotSupportedThe Nachricht mit Aktion ‚‘ kann nicht an die verarbeitet werden Empfänger aufgrund einer Contract Mismatch am EndpointDispatcher. Dies kann sein, weil entweder ein Vertrag Mismatch (mismatched Aktionen zwischen Sender und Empfänger) oder einem Bindung / security fehlende Übereinstimmung zwischen dem Sender und Empfänger. Prüfe das Sender und Empfänger die gleiche Vertrag und die gleiche Bindung (Einschließlich der Sicherheitsanforderungen, z.B. Nachricht, Verkehr, Keiner).'. ---> System.Net.WebException: Die Fern Server einen Fehler zurückgegeben: (500) Interner Serverfehler ..

Soweit ich verstanden, gibt es einige Probleme zwischen Contract und EndpointDispatcher. Ich habe zu goodgle versucht, aber nichts gefunden verständlich ...

Ich habe auch versucht, Anruf wcf Service-Methoden in einer anderen Art und Weise:

EnrollmentServiceClient serviceClient = new EnrollmentServiceClient("http://localhost/EnrollmentService.svc");

PublishResult res = serviceClient.PublishEnrollmentProfile(...);

Dass kehrt mir ein anderer Fehler:

kann nicht Endpunktelement finden mit Name ' http: //localhost/McActivation/EnrollmentService.svc ' und Vertrag 'EnrollmentServiceReference.IEnrollmentService' im Servicemodel-Client Konfigurationsabschnitt. Das könnte sein da keine Konfigurationsdatei war für Ihre Anwendung gefunden, oder weil keine passenden Endpunkt Element dieses Namen kann im Client-Elemente gefunden werden ..

Question1:

Was ist eine richtige Art und Weise zu instantiate wcf-Service-Client?

Questions2:

Was in meinem Fall falsch ist?

Vielen Dank.

P. S. Bei einigen Fragen kann ich Service verbinden mit WcfTestClient, sind weitere Details hier: WCF-Dienst: rufen können diese Methoden nicht durch den Endpunkt ‚WebHttpBinding‘

P.P.S. Hier ist Server-Seite WCF-Service-Konfiguration:

<system.serviceModel>
<services>
  <service name="McActivationApp.EnrollmentService" behaviorConfiguration="McActivationApp.EnrollmentServicBehavior">
    <endpoint address="" binding="webHttpBinding" contract="McActivationApp.IEnrollmentService"/>
    <endpoint address="mex" binding="mexHttpBinding" contract="McActivationApp.IEnrollmentService" />
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="McActivationApp.EnrollmentServicBehavior">
      <serviceMetadata httpGetEnabled="True"/>
      <serviceDebug includeExceptionDetailInFaults="False" />
    </behavior>
  </serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
</system.serviceModel>
War es hilfreich?

Lösung

Ihr Problem ist folgende: Dienstkonfiguration definiert einen webHttpBinding Endpunkte - das ist ein REST ( "XML-over-HTTP") Endpunkt ....

Doch Ihr Client verwendet einen basicHttpBinding und dies ist eine SOAP Bindung - das ist nicht kompatibel

Sie müssen dies ändern, dass der Service-Endpunkt (en) von der Serviceseite angeboten zu machen sind, so dass der Client eine Verbindung herstellen kann.

So:

  • fügen Sie entweder eine anderen Endpunkt zu Ihrer Dienstkonfiguration mit dem basicHttpBinding und einer Verbindung zu diesem Endpunkt

oder:

  • Ihre Client-Seite Verwendung webHttpBinding ändern
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top