2016-03-25 13 views
0

Ich habe eine Bibliothek, die einen Service-Referenz-Proxy zu einem Remote-ASMX-Webdienst enthält. Wenn ich versuche, aus einer ASP.NET-Anwendung auf diesem Proxy-Methoden aufrufen, erhalte ich folgende Fehlermeldung:WCF-Client-Methoden aus ASP.NET-App aufgerufen 404 Nicht gefunden

System.ServiceModel.EndpointNotFoundException: There was no endpoint listening at https://domain.com/path/to/the.asmx that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details. ---> System.Net.WebException: The remote server returned an error: (404) Not Found.

Allerdings, wenn ich die gleichen Methoden von einer einfachen Konsolenanwendung aufrufen fiel in den Ordner bin (und damit referenziert genau die gleichen Bibliotheken), es funktioniert. Ich habe die gleiche, einfache Konfiguration in web.config und der app.config Konsole App:

<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> 

Tracing keine weiteren nützliche Informationen enthüllt. Der ASMX-Endpunkt ist definitiv verfügbar. Was könnte dieses Verhalten verursachen und welche anderen Schritte zur Fehlerbehebung kann ich durchführen?

Antwort

0

Dies stellte sich als Parameterproblem heraus. Mein Produktionscode übergab null für einen optionalen Zeichenfolgenparameter, aber mein Testcode übergab eine GUID. Der Parameter ist im Vertrag optional, daher verstehe ich nicht, warum er einen 404 ausgelöst hat, aber ich kann das Problem konsistent reproduzieren, indem ich null übergebe.

Der Vertrag Parameter wie folgt definiert ist:

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

Der 404-Fehler warf mich von Anfang an ab. Es ist eine Erinnerung, immer Ihren Testcode genau zu schreiben, wie der Code, der nicht funktioniert.