Konfiguration von WCF-Client zu verbrauchen, einen WCF-Dienst mithilfe von HTTP-GET
Ich habe einen WCF-Service, der es nur HTTP-GET-Anfragen:
[WebInvoke(Method="GET", ResponseFormat=WebMessageFormat.Json)]
public string GetAppData()
Der service ist ausgesetzt mit webHttpBinding
<system.serviceModel>
<bindings>
<webHttpBinding>
<binding name="AppSvcBinding">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows" />
</security>
</binding>
</webHttpBinding>
</bindings>
<behaviors>
Habe ich meine Kunden, deren config sieht aus wie
<system.serviceModel>
<client>
<endpoint address="http://localhost/AppService/Service.svc"
binding="webHttpBinding"
bindingConfiguration="webHttpBindingConfig"
contract="AppSvc.IService"
behaviorConfiguration="AppSvcBehavior"
name="AppSvcClient">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
</client>
<bindings>
<webHttpBinding>
<binding name="webHttpBindingConfig">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows" />
</security>
</binding>
</webHttpBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behavior name="AppSvcBehavior">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
Mein client-code ist eine einfache
ServiceClient client = new ServiceClient("AppSvcClient");
String result = client.GetAppData();
Auf dem ausführen dieses Codes bekomme ich die Fehlermeldung:
Dem remote-server eine unerwartete Antwort zurückgegeben: (405) Method not Allowed.
Ich habe mit fiddler und festgestellt, dass mein client sendet eine POST-Meldung in der Erwägung, dass erwartet, dass der Dienst eine BEKOMMEN, daher der Fehler.
Möchte ich wissen, wie der client so konfiguriert wird, sendet GET-request an den service.
Was macht der rest Ihrer server-side-Konfiguration Aussehen?
InformationsquelleAutor sandyiit | 2011-02-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden WebGet statt WebInvoke
Bearbeiten
Starten, indem Sie Ihre Methode:
Stellen Sie sicher, dass "webhttpbinding" angegeben ist, auf der server-Seite.
Diese behebt es auf der server-Seite.
Nehmen Sie ein backup von Ihrem client-code.
Auf der client-Seite löschen, die service-Referenz. Stellen Sie sicher, dass alle config entfernt.
Dann fügen Sie den Dienstverweis erneut. Nun es sein soll, OK.
Ich brauche etwas, was auf der client-Seite zu erwähnen, die gleiche
Sie müssen die Aktualisierung der web-Referenz nach der änderung für den client zu aktualisieren
für eine webHttpBinding -, Update-service-Referenz ist nicht von nutzen.
Ich habe versucht, WSHTTPBinding auch, aber keine änderung. Ich würde gerne wissen, die die config-änderung, die Verbindlich oder Verhalten, welche Bedürfnisse zu sein, dont sagen .NET, um den service-Aufruf eine GET-Anforderung statt der POST.
InformationsquelleAutor Shiraz Bhaiji
Ich hatte ein ähnliches problem, wo der generierte proxy-service-Schnittstelle auf dem client fehlt die
WebGet
Attribut auf meine Methoden.Habe ich noch das Attribut manuell und es das problem behoben.
So scheint es, die bestmögliche Lösung zum extrahieren der service-Schnittstellen in einer separaten assembly und dann teilen diese Verbindung zwischen dem server und den clients.
Die automatische proxy-generator zu sein scheint buggy.
InformationsquelleAutor Steve