使用ChannelFactory找不到WCF侦听端点

时间:2014-05-27 09:16:06

标签: c# web-services wcf channelfactory

嘿同事开发人员和软件工程师,

我最近遇到了一个问题,它不允许我使用404访问我的WCF服务(使用ChannelFactory)。

以下是详细信息:

托管相同WS的多个Web服务器(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调用开始时,我碰巧遇到异常: 没有端点在&#39; http://dev-02.apps.rd.local/IISManagerWS/ws.svc&#39;那可以接受这个消息。这通常是由错误的地址或SOAP操作引起的。有关详细信息,请参阅InnerException(如果存在)。

内在的例外: (404)未找到。

如果我通过URL访问WS: WCF WS

我已经尝试了很多研究,但即使有很多主题看起来一样,我也没有成功解决这个错误。

1 个答案:

答案 0 :(得分:2)

在阅读有关设计RESTful Web服务的过程中,我自己找到了解决方案。

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