Setzen webHttpBinding-Endpunkt in einem WCF-Dienst
Erstellte ich einen WCF-Dienst und ausgesetzt drei Endpunkte, die basicHttpBinding, wsHttpBinding und "webHttpBinding". Dies ist ein test-service für meine Experimente mit dem WCF. Aber, wenn ich den Dienstverweis hinzufügen mit die .svc-Datei, erhalte ich nur zwei (basic und ws) Endpunkte. Es scheint nicht zu sein, ein Drittel (webHttpBidning) Endpunkt ausgesetzt, aus irgendeinem Grund.
Um dieses Problem zu reproduzieren, erstellen Sie eine WCF-Anwendung-Projekt, löschen Sie die Service1-Dienst, neues Element hinzufügen > WCF-Dienst mit dem Namen " TestService, und ändern Sie die config-Datei wie folgt :
<system.serviceModel>
<services>
<service name="WcfTestService.TestService" behaviorConfiguration="TestServiceBehavior">
<host>
<baseAddresses>
<add baseAddress="http://localhost/WcfTestService/TestService.svc"/>
</baseAddresses>
</host>
<endpoint address="basic"
binding="basicHttpBinding"
contract="WcfTestService.ITestService" />
<endpoint address="ws"
binding="wsHttpBinding"
contract="WcfTestService.ITestService" />
<endpoint address="web"
binding="webHttpBinding"
contract="WcfTestService.ITestService" />
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="TestServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="webBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
Hier ist der code für ITestService.cs:
[ServiceContract]
public interface ITestService
{
[OperationContract]
[WebInvoke]
Boolean ValidateUser(User user);
}
[DataContract]
public class User
{
[DataMember(Name = "Name")]
public String UserName { get; set; }
[DataMember]
public String Password { get; set; }
}
und TestService.svc
public class TestService : ITestService
{
public bool ValidateUser(User user)
{
if (user.UserName == "User" && user.Password == "123")
{
return true;
}
return false;
}
}
Ich versuchte verschiedene Kombinationen der WebInvoke Parameter und WebGet Parameter, scheiterte aber.
Kann mir jemand sagen, warum der Dritte Endpunkt wird nicht angezeigt in der WSDL-Datei?
Du musst angemeldet sein, um einen Kommentar abzugeben.
@decyclone: ich habe erfolgreich ausgesetzt webHttpBindings ohne Problem. Aber ich fand einige interessante Sache, wenn es ausgesetzt, und wenn es nicht!
Kann ich sehen, web-Bindung immer ausgesetzt in der Wcf Test Client.
Hier sind meine Konfigurationen
Punkt hier zu beachten ist, seine arbeiten gut mit VS2008 mit Framework 3.5, VS2010 mit Framework 3.5, wenn ich mit VS2010 und Framework 4.0 dann kann ich nicht sehen "WebHttpBinding" immer ausgesetzt in der WCF Test-Client, jedoch kann ich verwenden, die binidng zu tun http post in allen Fällen.
Ich gehe davon aus, dass in der Framework 4.0 seiner standardmäßig nicht sichtbar, auch ich versuche, aktivieren endpointDiscovery, aber noch kein Glück!
Abgedeckt habe ich dieses Verhalten in meinem post
Ihrem "web" - Endpunkt ausgesetzt werden als JSON-Endpunkt. Es ist nicht kompatibel mit WSDL.
"WebHttpBinding" ist im System.ServiceModel.Web. Wenn Sie mit vs2010, gehen Sie zu Eigenschaften Ihres Projekts, überprüfen Sie die Ziel-framework. Standardmäßig ist es Punkte zu .Net Framework 4 Client Profile. Es sollte darauf hinweisen .Net Framework 4, dann finden Sie das System.ServiceModel.Web wenn, gehen Sie auf Verweis Hinzufügen
@decyclone: Eine Möglichkeit, ein javascript-client können lernen, die zur Verfügung stehenden Methoden auf eine "webHttpBinding", ist der download von einem WCF-javascript-proxy mit HTML-Skript-tags, die auf Ihrem Endpunkt, gefolgt von "/js":
<script src="http://localhost/WcfTestService/TestService.svc/web/js"></script>