Ich habe einen WCF-Dienst, bei dem alles programmgesteuert gestartet wird (und muss dies weiterhin tun), und ich möchte, dass dieser Dienst auf [WebGet]
Attribute reagiert.WCF-Dienst mit WebGet funktioniert nicht
Wenn ich jedoch eine der WCF-Methoden aufrufen, gibt der Dienst eine 400 ungültige Anforderung zurück. Dies würde zunächst wie ein Duplikat von WCF Service Returns 400 error when using WebGet oder Bad Request 400 while accessing WCF Rest service (WebGet) scheinen, aber beide Lösungen hinzufügen, web.config
, eine Datei, die ich nicht habe, weil ich alles programmgesteuert tun muss.
Ich habe versucht, eine WebHttpBinding zu hinzufügen, was wie der Endpunkt scheint, aber es funktioniert nicht richtig (ich mache es wahrscheinlich nicht den richtigen Weg).
Der Code beginnt unten ohne Fehler, aber wenn ich zu http://localhost:8765/MyService/MyTest
gehen versuchen, erhalte ich die oben genannten 400 Bad Request
Was bin ich?
WCF Starter
MyService myService = new MyService();
ServiceHost host = new ServiceHost(myService, new Uri("http://localhost:8765/MyService"));
ServiceBehaviorAttribute behavior = host.Description.Behaviors.Find<ServiceBehaviorAttribute>();
behavior.InstanceContextMode = InstanceContextMode.Single;
foreach(ServiceEndpoint endpoint in host.Description.Endpoints) {
endpoint.Binding = new WebHttpBinding();
}
host.Open();
Service-Schnittstelle
[ServiceContract]
public interface IMyService {
[OperationContract]
[WebGet]
string MyTest();
}
Service-Implementierung
public class MyService : IMyService {
public string MyTest() {
return "Response from WCF service";
}
}
Ich denke, der Schlüssel zu dem, was ich fehlte, war 'WebServiceHost' und das Hinzufügen eines neuen' WebHttpBinding' als neuer Endpunkt (mit einer leeren Adresse) an den Host. Diese beiden Dinge zu tun, hat es funktioniert. – GTHvidsten