簡體   English   中英

使用ChannelFactory找不到WCF偵聽端點

[英]WCF Listening Endpoint not found using ChannelFactory

嗨,開發人員和軟件工程師,

我最近遇到了一個問題,該問題使我無法使用404(使用ChannelFactory)訪問WCF服務。

詳細信息如下:

多個Web服務器托管相同的WS(WCF.Net4 / IIS8.5)

每個WS的服務器web.config:

<?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0"/>
    <customErrors mode="Off"/>
  </system.web>
  <system.serviceModel>
    <bindings>
      <webHttpBinding>
        <binding name="crossDomain" crossDomainScriptAccessEnabled="true"/>
      </webHttpBinding>
      <basicHttpBinding>
        <binding name="" maxReceivedMessageSize="26144"/>
      </basicHttpBinding>
    </bindings>
    <behaviors>      
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="enableScriptBehaviour">
          <webHttp />
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <services>
      <service name="IISManagerWS.WS">        
        <endpoint address="" binding="webHttpBinding" behaviorConfiguration="enableScriptBehaviour" contract="ContractDll.IWS"/>        
      </service>
    </services>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="True" />
  </system.serviceModel>
</configuration>

WS的重要說明:我為服務合同使用了ClassLibrary,因此可以在客戶端中使用ChannelFactory。
為什么我使用ChannelFactory? 這似乎是使用多個完全相同的WS的最簡單方法。 因為這些Web服務的數量可能會更多,所以我希望通過代碼動態地實現它。

合同Dll的接口:

namespace ContractDll
{
    [ServiceContract]
    public interface IWS
    {
        [WebGet()]
        [OperationContract]
        WebSite[] getLocalSiteInventory();
    }

    [DataContract]
    public class WebSite
    {
        [DataMember]
        public String Name { get; set; }
        [DataMember]
        public String AppPool { get; set; }
        [DataMember]
        public String Authentication { get; set; }
        [DataMember]
        public String Path { get; set; }
        [DataMember]
        public String Server { get; set; }
        [DataMember]
        public Boolean HasSSL { get; set; }
    }    
}   

在客戶端,除了連接字符串外,我有一個空的app.config,所以這里沒有什么特別的。 大量的魔術應該發生在后面的代碼中:

BasicHttpBinding binding = new BasicHttpBinding();
EndpointAddress address = new EndpointAddress(ServiceURL);                
ChannelFactory<IWS> factory = new ChannelFactory<IWS>(binding, address);
IWS channel = factory.CreateChannel(address);                
WebSite[] sites = channel.getLocalSiteInventory();  

但是,當我的WS-Method的調用開始進行時,我碰巧遇到了一個異常: 在' http://dev-02.apps.rd.local/IISManagerWS/ws.svc '上沒有偵聽端點可以接受信息。 這通常是由不正確的地址或SOAP操作引起的。 有關更多詳細信息,請參見InnerException(如果存在)。

內部異常發生: (404)未找到。

如果我通過URL訪問WS: WCF WS

我已經嘗試了很多研究,但是即使有很多看起來相同的主題,我也未能成功解決此錯誤。

在閱讀有關設計RESTful Web服務的內容時,自己找到解決方案。

WebChannelFactory<IWS> cf = new WebChannelFactory<IWS>(new Uri(ServiceURL));
IWS channel = cf.CreateChannel();
WebSite[] sites = channel.getLocalSiteInventory();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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