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

前端之家收集整理的这篇文章主要介绍了在Delphi Win32 Client中使用WCF服务(basicHttpBinding)时出现问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用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字符串类型相同?).当我尝试调用此服务时,我得到异常:

The message with Action ” cannot be processed at the receiver,due to a ContractFilter mismatch at the EndpointDispatcher. This may be because of either a contract mismatch (mismatched Actions between sender and receiver) or a binding/security mismatch between the sender and the receiver. Check that sender and receiver have the same contract and the same binding (including security requirements,e.g. Message,Transport,None).

我没有看到任何方法来配置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);
    }
}

猜你在找的Delphi相关文章