14

我正在尝试使用 WCF 测试客户端来测试我构建的 WCF 服务。

该服务有一种方法“SubmitRequest”。

[OperationContract]
Response SubmitRequest(Request request);

当我加载 WCF 测试客户端时,该方法显示为灰色,并显示消息“WCF 测试客户端不支持此操作,因为它使用 WcfLibrary.Objects.Request 类型

下面是类型定义,有没有人看出什么问题?

[DataContract]
public class Request
{
    [DataMember]
    public string LoanNumber { get; set; }

    [DataMember]
    public string ClientCode { get; set; }

    [DataMember]
    public Region Region { get; set; }

    [DataMember]
    public RequestType RequestType { get; set; }

    [DataMember]
    public List<RequestParameter> RequestParameters { get; set; }

    [DataMember]
    public List<MspWebCallType> MspWebCallsForXmlRequest { get; set; }

    [DataMember]
    public Hashtable XmlRequestParameters { get; set; }

    public Request(string loanNumber, string clientCode, Region region, RequestType requestType, List<RequestParameter> requestParameters)
    {
        LoanNumber = loanNumber;
        ClientCode = clientCode;
        Region = region;
        RequestType = requestType;
        RequestParameters = requestParameters;
    }
}

[DataContract]
public class MspWebCallType
{
    [DataMember]
    public string WebService { get; set; }
    [DataMember]
    public string Operation { get; set; }
    [DataMember]
    public string Version { get; set; }
    [DataMember]
    public Hashtable Parameters { get; set; }
    [DataMember]
    public Msp.FavReadViews FAVReadViewIndicator { get; set; }
    [DataMember]
    public Msp.DsReadIndicators DSReadInidicator { get; set; }        
}

[DataContract]
public enum Region 
{ 
        [EnumMember]
        P2,
        [EnumMember]
        PROD 
}

[DataContract]
public enum RequestType
{
    [EnumMember]
    None,
    [EnumMember]
    XmlRequest,
    [EnumMember]
    SomeOtherRequestType
}

[DataContract]
public struct RequestParameter
{
    [DataMember]
    public string ParameterName { get; set; }

    [DataMember]
    public string ParameterValue { get; set; }
}

谢谢。

编辑 w/ answer...
该操作无法通过 WCF 测试客户端使用,因为 MspWebCallType 类型具有 Hashtable 类型的属性。一旦我删除了这个属性,它就解决了这个问题。感谢大家的帮助。

4

4 回答 4

27

以下是 WCF 测试客户端不支持的功能列表:

  • 类型:Stream、Message、XmlElement、XmlAttribute、XmlNode,实现 IXmlSerializable 接口的类型,包括相关的 XmlSchemaProviderAttribute 属性,以及 XDocument 和 XElement 类型以及 ADO.NET DataTable 类型。

  • 双工合同。

  • 交易。

  • 安全性:CardSpace、证书和用户名/密码。

  • Bindings:WSFederationbinding,任何 Context 绑定和 Https 绑定,WebHttpbinding(Json 响应消息支持)。

资料来源:MSDN

检查Msp.FavReadViewsMsp.DsReadIndicators确保它们符合要求。

于 2011-12-19T21:54:53.200 回答
0

这可能是因为Request需要有一个公共的非参数构造函数。

于 2011-12-20T17:20:47.430 回答
0

在这里回答,因为这是 Google 目前针对此错误的第一个结果:

除了@Igby Largeman 的回答之外,如果在您的操作或数据合同的某处,您使用了不可序列化的类型,您也会收到此错误。

以 .NET 中的 Exception 类为例...

我有一个案例,我团队中的开发人员选择通过 DTO 将异常对象发送回服务的客户端,而不是手动将异常消息放入 DTO。Visual Studio 不会在构建时警告您(确实应该),该类不可序列化,它只会在运行时失败。

因此,如果您收到此错误并排除了上述答案,请确保检查合同和 DTO 中使用的类型;无法序列化的东西可能是你的罪魁祸首。

我希望这可以节省一些时间。

于 2016-10-06T18:53:46.043 回答
0

我有同样的错误,问题是这个类有一个 System.Drawing.Image 属性。我把它从课堂上删除了,它起作用了。我将字节数组转换为 base64 字符串。

于 2017-04-30T22:25:34.930 回答