Frage

Ich versuche, eine Delphi-client (Delphi 2006) für die Kommunikation mit einem service geschrieben, mit der WCF.Service ist verdammt einfach mit nur einer Funktion.Technisch wie unten:

[ServiceContract (Namespace = "http://www.company.com/sample/")]
public interface IService
{
    [OperationContract]
    string GetNumber (string name);
}

Ich gewirkt haben, ist dieser Dienst auf IIS und stellte es mit basicHttpBinding mit dem mex-Endpunkt.Ich bin in der Lage zu verwenden es in .NET-clients.

Ich habe versucht zu laufen WSDLImp.exe und es erzeugte eine source-code-Einheit (btw, es erzeugt seltsame Klassen zu Kapseln, string-Typ.Warum kann er derselbe sein wie der Delphi-string-Typ?).Wenn ich versuche, den Dienst, ich bekomme die Ausnahme:

Die Meldung mit der Aktion " kann nicht verarbeitet werden am Empfänger aufgrund einer ContractFilter mismatch at the EndpointDispatcher.Dies kann sein, weil ein Vertrag mismatch (nicht übereinstimmende Aktionen zwischen Absender und Empfänger) oder a binding/security mismatch zwischen dem sender und dem Empfänger.Prüfen Sie, dass sender und Empfänger den gleichen Vertrag und die gleiche Bindung (einschließlich Sicherheitsanforderungen, z.B.Message, Transport, None).

Ich sehe keine Möglichkeit zum konfigurieren der Delphi-Win32-client ändern der Bindung oder die Sicherheitsparameter sind.Wie kann ich dieses problem beheben?

War es hilfreich?

Lösung

Ich habe genau das gleiche problem.Delphi nur schwer Zeit zum importieren der WSDL ausgesetzt durch die WCF.Eine Lösung ist das hinzufügen einer ASMX-wrapper, um Ihren service und nutzen, die mit Delphi-clients.

Hier ist ein Beispiel:

[ServiceContract (Namespace = "http://www.company.com/sample/")]
public interface IService
{
    [OperationContract]
    string GetNumber (string name);
}

public class Service : IService
{
    public string GetNumber (string name)
    {
        return Repository.GetNumber(name);
    }
}

[WebService(
    Namespace = "http://www.company.com/sample/",
    Name = "wstest",
    Description = "description")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class AsmxService : WebService
{
    [WebMethod]
    public string GetNumber(string name)
    {
        return Repository.GetNumber(name);
    }
}

Andere Tipps

Sie müssen sich auf den Netzwerk-Datenverkehr zwischen dem client und-Dienst, um zu sehen, was Los ist.Alternativ, aktivieren Sie WCF-tracing auf den Dienst, möglicherweise einschließlich Nachricht-Ablaufverfolgung.Sie sollten in der Lage sein zu sehen, was Los ist, in große detail.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top