[英]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:
我已经尝试了很多研究,但是即使有很多看起来相同的主题,我也未能成功解决此错误。
在阅读有关设计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.