Wie verbrauchen nicht-IIS gehostet, WCF, C# web service von Delphi 2007?

Ich geschrieben habe, eine ziemlich einfache, kleine C# - web service, gehostet von einem standalone-EXE via WCF. Die code - etwas vereinfacht - wie folgt aussieht:

namespace VMProvisionEXE
{
class EXEWrapper
{
    static void Main(string[] args)
    {
        WSHttpBinding myBinding = new WSHttpBinding();
        myBinding.Security.Mode = SecurityMode.None;

        Uri baseAddress = new Uri("http://bernard3:8000/VMWareProvisioning/Service");
        ServiceHost selfHost = new ServiceHost(typeof(VMPService), baseAddress);

        try
        {
            selfHost.AddServiceEndpoint(typeof(IVMProvisionCore), myBinding, "CoreServices");

            ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
            smb.HttpGetEnabled = true;
            smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy12;
            selfHost.Description.Behaviors.Add(smb);

            //Add MEX endpoint
            selfHost.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName, MetadataExchangeBindings.CreateMexHttpBinding(), "mex");

            selfHost.Open();
            Console.WriteLine("The service is ready.");
            Console.ReadLine();

Den rest der C# - code; die Klasse VMPService oben implementiert VMProvisionCore.IVMProvisionCore.

namespace VMProvisionCore
{
[ServiceContract(Namespace = "http://Cisco.VMProvision.Core", ProtectionLevel = System.Net.Security.ProtectionLevel.None)]
public interface IVMProvisionCore
{
    [OperationContract]
    bool AuthenticateUser(string username, string password);
}

Ich kann einfach erstellen Sie ein Visual Studio 2008-client-Anwendung, verbraucht dieses service. Keine Probleme. Aber mit Delphi 2007, ist eine andere Frage. Ich kann die WSDL-importer in Delphi zum abrufen der WSDL aus (in diesem Fall) http://bernard3:8000/VMWareProvisioning/Service?wsdl Die import-unit kompiliert einwandfrei. Ich habe zum initialisieren der proxy von hand, da die WSDL nicht eine URL enthalten (man beachte das zusätzliche "/CoreServices", wie gezeigt, in der C# - code):

var
  Auth: AuthenticateUser;
  AuthResponse: AuthenticateUserResponse;
  CoreI: IVMProvisionCore;
begin
  CoreI:= GetIVMProvisionCore(False, 'http://bernard3:8000/VMWareProvisioning/Service/CoreServices');
  Auth:= AuthenticateUser.Create;
  try
    Auth.username:= 'test';
    Auth.password:= 'test';
    AuthResponse:= CoreI.AuthenticateUser(Auth);
  finally
    FreeAndNIL(Auth);
  end;

Der obige code erzeugt eine Fehlermeldung, wenn es Sie trifft die "CoreI.AuthenticateUser(Auth);". Der Fehler ist "Nicht verarbeiten kann, die Nachricht, da der content-Typ " text/xml; charset="utf-8" war nicht die erwarteten Typ 'application/soap+xml; charset=utf-8."

Ich vermute, ich habe einen dummen kleinen Fehler irgendwo, vielleicht beim import der WSDL oder in der Verbindung Optionen oder etwas. Kann mir jemand helfen?

InformationsquelleAutor Jason Swager | 2009-07-09
Schreibe einen Kommentar