在Delphi Win32客户端中使用WCF服务(basicHttpBinding)时出现问题

在Delphi Win32客户端中使用WCF服务(basicHttpBinding)时出现问题,wcf,delphi,soap,delphi-2006,Wcf,Delphi,Soap,Delphi 2006,我正在尝试制作一个Delphi客户端(Delphi2006),以便与使用WCF编写的服务进行通信。服务非常简单,只有一个功能。技术上如下: [ServiceContract (Namespace = "http://www.company.com/sample/")] public interface IService { [OperationContract] string GetNumber (string name); } 我在IIS上托管了此服务,并使用basicHtt

我正在尝试制作一个Delphi客户端(Delphi2006),以便与使用WCF编写的服务进行通信。服务非常简单,只有一个功能。技术上如下:

[ServiceContract (Namespace = "http://www.company.com/sample/")]
public interface IService
{
    [OperationContract]
    string GetNumber (string name);
}
我在IIS上托管了此服务,并使用basicHttpBinding和mex端点将其公开。我可以在.NET客户端中使用它

我试着运行WSDLImp.exe,它生成了一个源代码单元(顺便说一句,它生成wierd类来封装字符串类型。为什么它不能与Delphi字符串类型相同?)。当我尝试调用此服务时,出现异常:

由于EndpointDispatcher上的ContractFilter不匹配,无法在接收器上处理具有操作“”的消息。这可能是因为合同不匹配(发送方和接收方之间的操作不匹配)或发送方和接收方之间的绑定/安全不匹配。检查发送方和接收方是否具有相同的合同和相同的绑定(包括安全要求,例如消息、传输、无)


我看不到任何方法可以配置Delphi Win32客户端来更改绑定或安全参数。我怎样才能解决这个问题?

我遇到了完全相同的问题。Delphi很难导入WCF公开的WSDL。一种解决方案是将ASMX包装器添加到您的服务中,并将其用于Delphi客户端

下面是一个例子:

[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);
    }
}

您需要查看客户端和服务之间的网络流量,以了解发生了什么。或者,在服务上启用WCF跟踪,可能包括消息跟踪。您应该能够非常详细地了解正在发生的事情。

对不起,我不明白您所说的“添加ASMX包装器”到底是什么意思。请您详细说明一下?通过“添加ASMX包装器”,我的意思是您可以向您的解决方案添加一个ASMX web服务,该服务具有与WCF服务相同的方法,并且这些方法执行完全相同的任务。一旦你添加这个asmx web服务,你就会得到一个.asmx端点,它可以被Delphi客户端使用。我不会再跳转到asmx了:。@John,我也不会跳转到Delphi。但正如你所看到的,仍然有人在使用它(包括我),我们必须找到将它与新技术(WCF)集成的解决方案。我之所以提出ASMX,是因为这是我自己测试过的东西,并且在生产中被证明工作得很好。我尝试了darin的建议,事实上,Delphi似乎很好地与ASMX服务集成。这是一个答案,也是一个观点+1.