Я тестирую службу WCF и слой данных EF, получая столбцы String как (ноль), но получаю целые числа как реальные данные. Почему строки нулевые? - PullRequest
0 голосов
/ 04 мая 2020
I'm building a multi-layered Windows VS C# solution that has a WCF Service Library project with EF6.2 loaded, and an ADO.NET Data layer with EF6.2 also.

Модель EDMX построена как набор таблиц «сначала база данных» с моего сервера MS SQL Server Express 2016 на моем ноутбуке. Мой интерфейс и код службы WCF на данный момент имеют свойства и методы только для одной из таблиц. И эта таблица также была построена в методах logi c и уровне данных. Итак, я сейчас тестирую эту службу с помощью тестового клиента WCF и правильно получаю некоторые целочисленные данные в ответе моей службы от уровня данных, но без строковых данных.

While testing my "GetMemberByID" method, it returns all String column results as a value of "(null)", and a type of "NullObject",

, но возвращает Целые числа с их фактическим значением. Ответ WCF Soap показывает возвращенные значения String как "". Но
целые числа возвращаются так: «7». В моей тестовой базе данных более 50 строк данных, которые используются в качестве источника для сборки EF6.2 EDMX. Мои App.config в слоях данных и служб ссылаются на один и тот же (localdb) \ V13.0 сервер и базу данных.

У кого-нибудь была эта проблема, и вы можете сказать мне, что мне не хватает? База данных MS SQL изначально была базой данных MS Access (OleDb), и я импортировал ее на сервер MS SQL. Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 06 мая 2020

Хорошо, я нашел свою ошибку. При переводе объектов бизнес-домена обратно в объекты Service в файле кода Service.cs я только переводил MemberID и RowVersion - и никаких других столбцов. Таким образом, единственное, что показывалось в результатах тестового клиента WCF, это MemberID и RowVersion, которые оказались единственными двумя не-строками в моей сущности. Все типы строк были нулевыми, потому что я не переводил их обратно в Сервис. Спасибо, что взглянули на это, Авраам, но ты заставил меня начать приглядываться, и спасибо за совет. Документация MS тоже была полезной. Как только я сделал полный «шаг в» отладочную трассировку от пользовательского интерфейса до уровня данных и обратно, я смог увидеть ошибку трансляции данных. Еще одна вещь, прежде чем я смог отладить шаг за шагом вплоть до уровня данных и обратно на уровень службы, я должен был исправить мою проблему «Базовая база данных не открылась», которая была у многих. Я размещаю свой сервис через локальный IIS, и мне пришлось внести несколько изменений в приложение IIS, касающиеся учетных данных пользователя. Мой App.config настроен на использование «Integrated Security = True» - это учетные данные «сквозного доступа» в пулах приложений IIS. Я установил в своем приложении IIS значение «Specifi c User», но в строке подключения не использовал идентификатор пользователя / пароль. Однажды я изменил свое приложение IIS на «Passthrough» - я смог подключиться, отладить DAL и обратно.

0 голосов
/ 04 мая 2020

Кажется, что-то не так с процессом сериализации. С моей стороны, строковое поле может быть возвращено правильно. По умолчанию DataContractSerializer используется для десериализации / десериализации данных сложного объекта.
https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/using-data-contracts
Наиболее вероятная причина может заключаться в том, что обнуляемое поле не декорируется [DataMember] атрибут. Проверьте, содержит ли столбец DataContract, автоматически сгенерированный на стороне клиента, атрибут [DataMember].
http://sivakrishnakuchi.blogspot.com/2010/05/troubleshoot-wcf-service-returning.html
Не стесняйтесь сообщить мне, если проблема все еще существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...