Метод службы WCF недоступен в тестовом клиенте WCF, поскольку он использует тип

Я пытаюсь использовать тестовый клиент WCF для тестирования созданной мной службы WCF.

служба имеет один метод "SubmitRequest".

[OperationContract]
Response SubmitRequest(Request request);

при загрузке тестового клиента WCF метод отображается серым цветом с сообщением "эта операция не поддерживается в тестовом клиенте WCF, поскольку он использует тип WcfLibrary.Объекты.Запрос

Ниже приведено определение типа, кто-нибудь видит что-то не так?

[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/ ответ...
Операция не была доступна через тестовый клиент WCF, поскольку тип MspWebCallType имел свойство типа Hashtable. Как только я удалил это свойство, он исправил проблему. Спасибо за помощь.

4 ответов


ниже приведен список функций, не поддерживаемых тестовым клиентом WCF:

  • типы: поток, сообщение, XmlElement, XmlAttribute, XmlNode, типы, которые реализуйте интерфейс IXmlSerializable, включая связанный Атрибут XmlSchemaProviderAttribute, а также XDocument и XElement типы и ADO.NET тип DataTable.

  • дуплексного контракта.

  • сделки.

  • безопасность: CardSpace, сертификат и имя пользователя / пароль.

  • привязки: WSFederationbinding, любые привязки контекста и привязка Https, WebHttpbinding (поддержка ответных сообщений Json).

источник: MSDN

Регистрация Msp.FavReadViews и Msp.DsReadIndicators для обеспечения их соответствия.


Это может быть потому что Request должен иметь открытый непараметрический конструктор.


ответ здесь, поскольку это первый результат в Google в настоящее время для этой ошибки:

в дополнение к ответу @Igby Largeman вы также получите эту ошибку, если где-то в вашей операции или контрактах данных вы использовали тип, который не сериализуется.

возьмем пример класса Exception в .NET...

У меня был случай, когда разработчик в моей команде решил отправить объект исключения клиенту службы через DTO, а не поместите сообщение об исключении в DTO вручную. Visual Studio не будет предупреждать вас во время сборки (это должно, действительно), что класс не сериализуется, он будет терпеть неудачу только во время выполнения.

поэтому, если вы получаете эту ошибку и исключили ответ выше, убедитесь, что вы проверяете типы, используемые в ваших контрактах и DTOs; что-то не сериализуемое может быть вашим виновником.

надеюсь, это сэкономит кому-то время.


У меня была такая же ошибка, и проблема заключалась в том, что у класса была система.Рисунок.Свойство изображения. Я убираю его из класса, и он работает. Я преобразую массив байтов в строку base64.