Hosting von WCF-soap-und rest-Endpunkte nebeneinander
Ich geschrieben habe, einen Dienst, den ich möchte, setzen via rest und soap. Alles, was ich gelesen habe über WCF 4.0 sagt, ich muss mich nur setzen 2 Endpunkte mit unterschiedlichen Verhaltensweisen, dies zu tun. Aber ich kann nicht ankommen es zu wirken.
Hier ist mein service-Vertrag:
[ServiceContract]
public interface MyService
{
[OperationContract]
[WebGet(UriTemplate="data/{value}")]
string GetData(string value);
}
Hier ist mein web.config:
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<services>
<service name="MyService">
<endpoint name="mex" address="mex" binding="mexHttpBinding" contract="MyService"/>
<endpoint address="rest" behaviorConfiguration="restBehavior" binding="webHttpBinding" contract="MyService" />
<endpoint address="soap" behaviorConfiguration="soapBehavior" binding="basicHttpBinding" contract="MyService" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="restBehavior">
<webHttp automaticFormatSelectionEnabled="true" helpEnabled="true" />
</behavior>
<behavior name="soapBehavior" />
</endpointBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/>
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
</configuration>
Bin ich mit dem routing zu definieren, mein Dienst-url:
public class Global : System.Web.HttpApplication
{
protected void Application_Start(object sender, EventArgs e)
{
RouteTable.Routes.Add(new ServiceRoute("dns", new ServiceHostFactory(), typeof(MyService)));
}
}
Gibt es etwas, was mache ich hier falsch? Ich könnte wirklich etwas Hilfe gebrauchen.
Ich fand auch diese andere question/answer hilfreich.
InformationsquelleAutor Troy | 2010-07-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fand ich nie die "richtige" Art und Weise, dies zu tun in Konfiguration, aber in der Lage war, die routing engine, um dies zu erreichen.
Mein global asax-Datei sieht nun wie folgt aus:
und meine config so aus: (zum aktivieren der restlichen Hilfe-Seiten)
Ich mag, dass dies im Einklang mit der asp.net MVC-Modell mehr und erfordert wenig config. Außerdem doing es auf diese Weise, die mir erlaubt, zu entfernen .svc-Dateien aus meinem Projekt ganz die auch ein plus IMO.
InformationsquelleAutor Troy
Wie hosten Sie Ihre WCF-service?? In IIS ist, müssen Sie ein virtuelles Verzeichnis und eine
MyService.svc
Datei irgendwo zum aktivieren der service-Aktivierung.Wenn Sie entfernen die ServiceRoute jetzt (zur Vereinfachung), sollten Sie in der Lage zu erreichen Ihre SOAP-Dienstendpunkt unter:
und Ihre REST-Dienst sollte bei
(wo liefern Sie den beliebigen Wert für
{value}
).Was genau nicht funktioniert in deinem Fall??
Können Sie versuchen und testen Sie Ihre SOAP-Endpunkten mit dem WCF Test Client, während Sie sollte in der Lage sein, Sie zu schlagen, die REST-url in einem beliebigen browser.
Ich habe versucht, das hinzufügen eines völlig neuen service-Datei (.svc) zu meinem Projekt. Mit der gleichen config wie oben, es sorta gearbeitet...sowohl rest-und soap-service funktionierte gut, von den .svc-url, aber die soap-Dienst wurde der Zugriff nur von der Wurzel. Der /soap-Adresse konfiguriert wurde nicht eingehalten.
InformationsquelleAutor marc_s
Dies ist möglich in der Konfiguration. Aus msdn forum-thread von user Mrnka Ladislav: http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/4e95575f-1097-4190-80dd-7a0f96d73f6e
http://host/myService.svc/soap/
InformationsquelleAutor yzorg