所以我有一个调用另一个WCF服务的WCF服务。我正在尝试调试第一个服务,所以我试图运行它。它失败了
http://<host>/ConfigurationService/ConfigurationService.svc
没有可以接受该消息的端点。这通常是由错误的地址或SOAP操作引起的。有关更多详细信息,请参阅InnerException(如果存在)。
内部异常是
{“远程服务器返回错误:(404)Not Found。”}
参考:
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IConfigurationService/GetGlobalConfigurationGroup", ReplyAction="http://tempuri.org/IConfigurationService/GetGlobalConfigurationGroupResponse")]
ConfigurationGroup GetGlobalConfigurationGroup();
获取确切的端点并将其放入浏览器中。把它放在WCFTestClient工作。这段代码已经在生产中运行,所以我不知道我做错了什么。我调试了调用,我发现它是作为POST而不是GET发送的。 我认为这是罪魁祸首,但我不知道如何解决它或为什么它神奇地不同。我查看了WCF method sending POST instead of GET和该答案中的链接,但我不理解它,无法使它工作,扩展它的类是生成的类,不会调试到它无论是。
我在配置服务上记录了失败请求,如果我转到错误的位置(ConfigurationService.svc1),则记录一些事情,但在调用它时则不记录。
<system.serviceModel>
<client>
<endpoint address="http://<host>/SecurityService/SecurityService.svc"
behaviorConfiguration="defaultBehavior" binding="basicHttpBinding"
bindingConfiguration="defaultHttpBinding" contract="Service.ISecurityService"
name="SecurityService" />
<endpoint address="http://<host>/ConfigurationService/ConfigurationService.svc"
behaviorConfiguration="defaultBehavior" binding="basicHttpBinding"
bindingConfiguration="defaultHttpBinding" contract="Service.IConfigurationService"
name="ConfigurationService" />
</client>
<bindings>
<basicHttpBinding>
<binding name="defaultHttpBinding" closeTimeout="00:10:00" openTimeout="00:10:00"
receiveTimeout="00:10:00" sendTimeout="00:10:00" maxReceivedMessageSize="2147483647" />
</basicHttpBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behavior name="defaultBehavior">
<dataContractSerializer ignoreExtensionDataObject="true" maxItemsInObjectGraph="2147483647" />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior>
<!-- To avoid disclosing metadata information, set the values below to false before deployment -->
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<protocolMapping>
<add binding="basicHttpsBinding" scheme="https" />
</protocolMapping>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>
配置服务配置:
<system.serviceModel>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
<services>
<service name="ConfigurationService" behaviorConfiguration="defaultBehavior">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="defaultHttpBinding"
contract="IConfigurationService"/>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<bindings>
<basicHttpBinding>
<binding name="defaultHttpBinding" maxReceivedMessageSize="2147483647" openTimeout="00:10:00" closeTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00">
<readerQuotas maxStringContentLength="2147483647" maxArrayLength="20971520"/>
</binding>
</basicHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="defaultBehavior">
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
编辑:我注意到它只在运行Web项目时表现出这种行为。
答案 0 :(得分:1)
尝试在您尝试呼叫的服务中使用数据合同。
https://msdn.microsoft.com/en-us/library/ms733127%28v=vs.110%29.aspx
这里简要说明它们是什么以及它们是如何工作的。
我认为这是错误,因为您的错误&#39; OperationContractAttribute&#39;
也许只是ServiceContract。
我希望这会有所帮助
答案 1 :(得分:1)
在分布服务且使用这些服务的应用程序通过WCF进行通信的多进程环境中,服务契约必须是可序列化的。确保合同对象序列化的最简单方法是使用数据协定属性修饰它们,如下所述:https://msdn.microsoft.com/en-us/library/ms733127%28v=vs.110%29.aspx
如果没有正确的序列化,您的服务仍然可以在某些条件下运行,除非您在调试时附加到所有相关进程,否则不会看到任何错误。即使记录有时也无法显示任何内容(或至少任何有用的内容)。
由于您正在使用dataContractSerializer,因此这可能不是配置问题。装饰您的服务合同类,以便可以通过WCF序列化。
答案 2 :(得分:0)
我曾经遇到过这个问题。事实证明,在我的Web项目配置中,我的服务地址错误。