Метод WCF-сервиса недоступен в тестовом клиенте WCF, поскольку он использует тип
Я пытаюсь использовать тестовый клиент 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; }
}
Спасибо.
EDIT w/answer...
Операция не была доступна через тестовый клиент WCF, поскольку тип MspWebCallType имел свойство типа Hashtable. Как только я удалил это свойство, он исправил проблему. Спасибо за помощь всем.
Ответы
Ответ 1
Ниже приведен список функций, не поддерживаемых тестовым клиентом WCF:
-
Типы: Stream, Message, XmlElement, XmlAttribute, XmlNode, типы, которые реализовать интерфейс IXmlSerializable, включая связанные Атрибут XmlSchemaProviderAttribute и XDocument и XElement типы и тип данных ADO.NET DataTable.
-
Договор дуплекса.
-
сделка.
-
Безопасность: CardSpace, сертификат и имя пользователя/пароль.
-
Привязки: WSFederationbinding, любые привязки контекста и привязка Https, WebHttpbinding (поддержка сообщений ответа Json).
Источник: MSDN
Проверьте Msp.FavReadViews
и Msp.DsReadIndicators
, чтобы убедиться в их соблюдении.
Ответ 2
Возможно, потому, что Request
должен иметь открытый непараметрический конструктор.
Ответ 3
Отвечая на этот вопрос, так как это первый результат в Google для этой ошибки:
В дополнение к ответу @Igby Largeman вы также получите эту ошибку, если где-то в вашей операции или контрактах с данными вы использовали тип, который не является сериализуемым.
Возьмем пример класса Exception в .NET...
У меня был случай, когда разработчик моей команды решил отправить объект Exception клиенту службы через DTO, вместо того, чтобы помещать сообщение об исключении в DTO вручную. Visual Studio не будет предупреждать вас о времени сборки (должно быть, действительно), что класс не является сериализуемым, он будет работать только во время выполнения.
Итак, если вы получаете эту ошибку и исключили ответ выше, убедитесь, что вы проверяете типы, используемые в ваших контрактах и DTO; что не может быть сериализуемым, может быть вашим виновником.
Надеюсь, это немного сэкономит время.
Ответ 4
У меня была такая же ошибка, и проблема заключалась в том, что класс имел свойство System.Drawing.Image. Я удаляю его из класса, и это сработало. Я преобразовываю массив байтов в строку base64.