我有一个WPF / WCF应用程序,我通过在我的解决方案的Service References文件夹中引用.asmx
URL来使用外部Web服务。
在服务器端,我在web.config
创建了条目,如下所示:
<binding name="ExtractService"
closeTimeout="00:01:00" openTimeout="00:01:00"
receiveTimeout="00:01:00" sendTimeout="00:10:00"
allowCookies="false" bypassProxyOnLocal="false"
hostNameComparisonMode="StrongWildcard"
maxBufferSize="2147483647" maxBufferPoolSize="524288"
maxReceivedMessageSize="2147483647"
messageEncoding="Text" textEncoding="utf-8"
transferMode="Buffered" useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192"
maxArrayLength="2147483647" maxBytesPerRead="4096"
maxNameTableCharCount="2147483647" />
<security mode="Transport">
<transport clientCredentialType="None" proxyCredentialType="None" realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
<client>
<endpoint name="ExtractService"
address="https://example.com/DataExtractService.asmx"
binding="basicHttpBinding" bindingConfiguration="ExtractService"
contract="ExtractService" />
</client>
此外,我在客户端的app.config
条目与上面的web.config
相同。
当我在开发环境中运行它时,一切正常。也许是因为我的客户端和Web服务器(WCF)在同一台机器上。
但是当我在我的测试服务器上部署应用程序时,它开始给出以下错误。在这种情况下,客户端在我的机器上,服务器(WCF)在其他机器上。
消息:HandlingInstanceID:71a85aef-dbb0-4c28-9035-57f8b7526ee0
发生并触发了类型'System.ServiceModel.EndpointNotFoundException'的异常。https://example.com/DataExtractService.asmx没有可以接受该消息的端点。这通常是由错误的地址或SOAP操作引起的。有关更多详细信息,请参阅InnerException(如果存在)。
要解决此问题,我尝试在客户端的app.exe.config
文件中复制相同的配置,但它不起作用。
我在哪里错过了客户端配置?我还复制了服务器bin文件夹中的app.config,但没有帮助。
答案 0 :(得分:1)
服务器方应包含一个<services>
部分,用于定义此服务器上哪些端点可用的服务(必须至少一个 <service>
子部分,定义至少一个端点,此服务可用于 - 也可能是多个)。
客户端方应包含连接到其中一个可用端点的部分<client>
。
或简而言之:如果您的服务器端配置中有否部分<services>
,那么您的不因此连接的任何端点,从而导致此错误。
所以你的服务器端配置应该是这样的:
<!-- Behavior is optional - maybe you need to define something, maybe not -->
<behaviors>
<serviceBehaviors>
<behavior name="ExtractServiceBehavior">
.....
</behavior>
</serviceBehaviors>
</behaviors>
<!-- Binding is the same as defined on the client -->
<binding name="ExtractService" ....
......
</binding>
<!-- Define all your services that you offer -->
<services>
<service name="ExtractService"
behaviorConfiguration="ExtractServiceBehavior">
<endpoint name="ExtractService"
address="https://example.com/DataExtractService.asmx"
binding="basicHttpBinding"
bindingConfiguration="ExtractService"
contract="IExtractService" />
</service>
</services>
另外:通常,您的合同应该是接口(IExtractService
) - 而不是实现该接口的具体类。