簡體   English   中英

在WCF服務中公開webHttpBinding端點

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM