我有一个库,其中包含一个服务引用生成的代理,用于远程ASMX Web服务。当我尝试从ASP.NET应用程序调用该代理上的方法时,我收到以下错误:
System.ServiceModel.EndpointNotFoundException:没有端点 在https://domain.com/path/to/the.asmx听,可以接受 信息。这通常是由错误的地址或SOAP操作引起的。 有关更多详细信息,请参阅InnerException(如果存在)。 ---> System.Net.WebException:远程服务器返回错误:(404) 找不到。
但是,如果我从一个简单的控制台应用程序调用相同的方法放入bin文件夹(因此引用完全相同的库),它可以工作。我在web.config和控制台应用程序的app.config中使用相同的简单配置:
<system.serviceModel>
<bindings>
<customBinding>
<binding name="ServicesSoap12">
<textMessageEncoding messageVersion="Soap12" />
<httpsTransport />
</binding>
</customBinding>
</bindings>
<client>
<endpoint address="https://domain.com/path/to/the.asmx"
binding="customBinding" bindingConfiguration="ServicesSoap12"
contract="TheContract" name="ServicesSoap12" />
</client>
</system.serviceModel>
追踪显示没有进一步的有用信息。 ASMX端点绝对可用。什么可能导致这种行为,以及我可以采取哪些其他故障排除步骤?
答案 0 :(得分:0)
这结果是一个参数问题。我的生产代码为可选的字符串参数传递null,但我的测试代码传递了一个guid。该参数在合同中是可选的,所以我不明白为什么它触发了404,但我能够通过传递null来一致地重现该问题。
合约参数定义如下:
<s:element minOccurs="0" maxOccurs="1" name="userdef1" type="s:string"/>
404错误让我从头开始。这提醒您始终将您的测试代码完全编写为不起作用的代码。