繁体   English   中英

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

[英]Problem in consuming WCF service (basicHttpBinding) in Delphi Win32 Client

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

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

我已在IIS上托管此服务,并使用带有mex端点的basicHttpBinding公开它。 我可以在.NET客户端中使用它。

我试图运行WSDLImp.exe并且它生成了一个源代码单元(顺便说一句,它生成了用于封装字符串类型的奇怪类。为什么它不能与Delphi字符串类型相同?)。 当我尝试调用此服务时,我得到异常:

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

我没有看到任何方法配置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跟踪,可能包括消息跟踪。 您应该能够非常详细地了解正在发生的事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM