[英]Consuming WCF Service with BasicHttpBinding and Windows Authentication
[英]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.