WCF服务方法在WCF测试客户端中不可用,因为它使用类型

时间:2011-12-19 21:34:19

标签: c# .net wcf wcftestclient operationcontract

我正在尝试使用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; }
}

感谢。

编辑带答案...
由于MspWebCallType类型具有Hashtable类型的属性,因此无法通过WCF测试客户端进行该操作。一旦我删除了这个属性,就解决了这个问题。感谢大家的帮助。

4 个答案:

答案 0 :(得分:27)

  

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

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

  •   
  • 双面合同。

  •   
  • 交易。

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

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

  •   

来源:MSDN

检查Msp.FavReadViewsMsp.DsReadIndicators以确保其符合要求。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

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

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

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

我希望能节省一些时间。

答案 3 :(得分:0)

我遇到了同样的错误,问题是该类有一个System.Drawing.Image属性。我从课堂上删除了它并且它有效。我将字节数组转换为base64字符串。