[英]Expose webHttpBinding endpoint in a WCF service
我創建了WCF服務,並公開了三個終結點,分別是basicHttpBinding,wsHttpBinding和webHttpBinding。 這是我使用WCF進行實驗的測試服務。 但是,每當我使用.svc文件添加服務引用時,我只會得到兩個(基本和ws)端點。 由於某種原因,似乎沒有第三個(webHttpBidning)終結點公開。
要重現此問題,請創建一個WCF應用程序項目,刪除Service1服務,添加名為ItemService的新項> WCF服務,並將配置文件更改為以下內容:
<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>
這是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; }
}
對於TestService.svc
public class TestService : ITestService
{
public bool ValidateUser(User user)
{
if (user.UserName == "User" && user.Password == "123")
{
return true;
}
return false;
}
}
我嘗試了WebInvoke參數和WebGet參數的不同組合,但是失敗了。
誰能告訴我為什么第三個端點未顯示在WSDL文件中?
@decyclone:我已經成功公開了webHttpBindings,沒有任何問題。 但是我發現了一些有趣的東西,當它暴露時,什么時候不暴露!
我可以看到Web綁定在Wcf Test Client中暴露出來。
這是我的配置
<services>
<service behaviorConfiguration="TestWeb.Service2Behavior" name="TestWeb.Service2">
<endpoint address="" binding="wsHttpBinding" contract="TestWeb.Service2">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="web" binding="webHttpBinding" contract="TestWeb.Service2">
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
這里要注意的是,當我使用VS2008和Framework 3.5,VS2010和Framework 3.5時,它可以正常工作,當我使用VS2010和Framework 4.0時,我看不到WebHttpBinding在WCF Test Client中公開,但是我可以使用該binidng進行http在所有情況下發布。
我假設在Framework 4.0中默認情況下它是不可見的,即使我嘗試啟用endpointDiscovery也仍然沒有運氣!
我已經在帖子中介紹了這種行為
您的“網絡”端點將作為JSON端點公開。 它與WSDL不兼容。
WebHttpBinding位於System.ServiceModel.Web中。 如果使用的是vs2010,請轉到項目的屬性,檢查目標框架。 默認情況下,它指向.Net Framework 4客戶端配置文件。 它應該指向.Net Framework 4,然后可以在添加參考時找到System.ServiceModel.Web。
@decyclone:javascript客戶端可以在webHttpBinding上學習可用方法的一種方法是下載WCF javascript代理,該代理具有指向您端點的HTML腳本標簽,后跟“ / js”: <script src="http://localhost/WcfTestService/TestService.svc/web/js"></script>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.