从ASP.NET应用程序调用的WCF客户端方法返回404 Not Found

时间:2016-03-25 08:48:45

标签: asp.net wcf

我有一个库,其中包含一个服务引用生成的代理,用于远程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端点绝对可用。什么可能导致这种行为,以及我可以采取哪些其他故障排除步骤?

1 个答案:

答案 0 :(得分:0)

这结果是一个参数问题。我的生产代码为可选的字符串参数传递null,但我的测试代码传递了一个guid。该参数在合同中是可选的,所以我不明白为什么它触发了404,但我能够通过传递null来一致地重现该问题。

合约参数定义如下:

<s:element minOccurs="0" maxOccurs="1" name="userdef1" type="s:string"/>

404错误让我从头开始。这提醒您始终将您的测试代码完全编写为不起作用的代码。