Результаты поиска
Какой самый простой способ добавить сжатие к WCF в Silverlight?
У меня есть приложение silverlight 2 beta 2, которое обращается к веб-службе WCF. Из-за этого в настоящее время он может использовать только привязку basicHttp. Веб-сервис вернет довольно большие объемы данных XML. Это кажется довольно расточительным с точки зрения использования полосы пропускания, поскольку ответ, если его сжать, будет меньше в 5 раз (на самом деле я вставил ответ в txt-файл и сжал его.).
Запрос действительно имеет "Accept-Encoding: gzip, deflate" - есть ли какой-либо способ получить WCF service gzip (или иным образом сжать) ответ?
Я действительно нашел эту ссылку , но она определенно кажется немного сложной для функциональности, которая должна быть обработана out-of-the-box IMHO.
OK-сначала я отметил решение, используя System.IO.Compression в качестве ответа, поскольку я никогда не мог "seem" заставить работать динамическое сжатие IIS7. Ну, как это получается:
Динамическое сжатие на IIS7 работало все время. Просто плагин Nikhil Web Developer Helper для IE не показал, что он работает. Я предполагаю, что поскольку SL передает вызов веб-службы браузеру, то браузер обрабатывает его "under the covers", и инструмент Nikhil никогда не видит сжатый ответ. Я смог подтвердить это с помощью Fiddler, который отслеживает трафик, внешний по отношению к браузерному приложению. В fiddler ответ был, по сути, gzip сжатым!!
Другая проблема с решением System.IO.Compression заключается в том, что System.IO.Compression не существует в Silverlight CLR.
Таким образом, с моей точки зрения, EASIEST способ включить сжатие WCF в Silverlight-это включить динамическое сжатие в IIS7 и вообще не писать код.
Возвращение DataTables в WCF/.NET
У меня есть сервис WCF, из которого я хочу вернуть DataTable. Я знаю, что это часто очень обсуждаемая тема, насколько возвращение DataTables является хорошей практикой. Давайте на минуту отложим это в сторону.
Когда я создаю DataTable с нуля, как показано ниже, нет никаких проблем вообще. Таблица создается, заполняется и возвращается клиенту, и все хорошо:
[DataContract]
public DataTable GetTbl()
{
DataTable tbl = new DataTable("testTbl");
for(int i=0;i<100;i++)
{
tbl.Columns.Add(i);
tbl.Rows.Add(new string[]{"testValue"});
}
return tbl;
}
Однако, как только я выхожу и нажимаю на базу данных для создания таблицы, как показано ниже, я получаю CommunicationException "The underlying connection was closed: The connection was closed unexpectedly."
[DataContract]
public DataTable GetTbl()
{
DataTable tbl = new DataTable("testTbl");
//Populate table with SQL query
return tbl;
}
Таблица заполняется правильно на стороне сервера. Он значительно меньше, чем тестовая таблица, которую я прокрутил и вернул, а запрос маленький и быстрый - здесь нет проблем с таймаутами или большой передачей данных. Используются те же самые точные функции и DataContracts/ServiceContracts/BehaviorContracts.
Почему способ заполнения таблицы имеет какое-либо отношение к успешному возвращению таблицы?
Каков наилучший способ аутентификации через WCF?
Каков наилучший способ реализации аутентификации через WCF?
Я бы предпочел не использовать WS-*, поскольку он должен быть независимым от транспорта.
Должен ли я "свернуть свой собственный"? Есть ли какие-либо рекомендации для этого (articles/blog сообщений)?
Или есть какой-то способ (и должен ли я) использовать встроенные поставщики членства и профилей ASP.NET на стороне сервера?
Я хотел бы получить несколько советов по отладке исключений веб-службы WCF
Я создал службу WCF, и когда я просматриваю конечную точку, я получаю следующую ошибку:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<s:Fault>
<faultcode
xmlns:a="http://schemas.microsoft.com/ws/2005/05/addressing/none">
a:ActionNotSupported
</faultcode>
<faultstring xml:lang="en-GB">
The message with Action '' cannot be processed at the receiver,
due to a ContractFilter mismatch at the EndpointDispatcher.
This may be because of either a contract mismatch (mismatched
Actions between sender and receiver) or a binding/security
mismatch between the sender and the receiver. Check that sender
and receiver have the same contract and the same binding
(including security requirements, e.g. Message, Transport, None).
</faultstring>
</s:Fault>
</s:Body>
</s:Envelope>
Я исправил проблему, но не получил удовольствия от опыта! Есть ли у кого-нибудь советы или инструменты для отладки подобных проблем?
Загрузка раздела конфигурации System.ServiceModel с помощью ConfigurationManager
Используя C# .NET 3.5 и WCF, я пытаюсь записать некоторые конфигурации WCF в клиентском приложении (имя сервера, к которому подключается клиент).
Очевидный способ-использовать ConfigurationManager для загрузки раздела конфигурации и записи необходимых мне данных.
var serviceModelSection = ConfigurationManager.GetSection("system.serviceModel");
Кажется, что всегда возвращается null.
var serviceModelSection = ConfigurationManager.GetSection("appSettings");
Работать отлично.
Раздел конфигурации присутствует в App.config, но по какой-то причине ConfigurationManager отказывается загружать раздел system.ServiceModel .
Я хочу избежать ручной загрузки файла xxx.exe.config и использования XPath, но если мне придется прибегнуть к этому, я сделаю это. Просто кажется, что это немного халтура.
Есть какие-нибудь предложения?
WCF push к клиенту через брандмауэр?
Смотрите также, Как информирует сервер WCF
клиент WCF об изменениях? (Лучше
решение тогда простой опрос, например
Комент или длинный опрос)
Смотрите также, Как информирует сервер WCF клиент WCF об изменениях? (Лучше решение тогда простой опрос, например Комент или длинный опрос)
Мне нужно использовать push-технологию с WCF через клиентские брандмауэры. Это должно быть распространенная проблема, и я знаю, что она работает в теории (см. ссылки ниже), но мне не удалось заставить ее работать, и я не смог найти образец кода, который демонстрирует это.
Требования:
- WCF
- Клиенты подключаются к серверу через порт tcp 80 (netTcpBinding).
- Сервер возвращает информацию с нерегулярными интервалами (от 1 минуты до нескольких часов).
- Пользователи не должны настраивать свои брандмауэры, серверные толчки должны проходить через брандмауэры, у которых закрыты все входящие порты. TCP дуплекс на том же соединении необходим для этого, двойная привязка не работает, так как порт должен быть открыт на клиентском брандмауэре.
- Клиенты посылают сердцебиения на сервер через регулярные промежутки времени (возможно, каждые 15 минут), чтобы сервер знал, что клиент все еще жив.
- Сервер-это IIS7 с WAS.
Решение, по-видимому, дуплекс netTcpBinding. На основании этой информации:
Сохранение открытых соединений в IIS
Но мне еще предстоит найти образец кода, который работает.. Я попытался объединить образцы "Duplex" и "TcpActivation" из образцов WCF Microsoft, но безуспешно. Пожалуйста, кто-нибудь может указать мне пример кода, который работает, или построить небольшой пример приложения. Большое спасибо!
Каким WCF лучшим практикам вы следуете при проектировании объектных моделей?
Я заметил, что несколько WCF приложений выбирают "break" своих объектов отдельно; то есть проект может иметь DataObjects assembly, который содержит DataContracts/Members в дополнение к значимой библиотеке классов, выполняющей бизнес-логику.
Является ли это ненужным уровнем абстракции? Есть ли какое-либо врожденное зло, связанное с прохождением и маркировкой существующих библиотек классов с информацией DataContract?
Кроме того, в качестве отступления, как вы справляетесь с условиями ошибок? Являются ли выброшенные исключения из службы (InvalidOperation, ArgumentException и так далее) общепринятыми или обычно существует уровень вокруг этого?
Закрытие и утилизация обслуживание WCF
Метод Close на ICommunicationObject может выдавать два типа исключений, как MSDN описывает здесь . Я понимаю, почему метод Close может вызывать эти исключения, но я не понимаю, почему метод Dispose на прокси-сервере службы вызывает метод Close без try вокруг него. Разве ваш метод Dispose не является единственным местом, где вы хотите убедиться, что вы не создаете никаких исключений?
Исключение InvalidOperationException при создании экземпляра веб-службы wcf
У меня есть веб-служба WCF, на которую ссылаются из библиотеки классов. После запуска проекта при создании объекта клиента службы из библиотеки классов я получаю сообщение InvalidOperationException with:
Не удалось найти элемент конечной точки по умолчанию, который ссылается на контракт 'MyServiceReference.IMyService' в клиенте ServiceModel раздел конфигурации. Это может быть связано с тем, что файл конфигурации не был найдено для вашего приложения, или потому что нет соответствия элементов конечной точки этот контракт можно найти в элементе клиент.
Код, который я использую для создания экземпляра::
myServiceClient = new MyServiceClient();
где MyServiceClient наследуется от
System.ServiceModel.ClientBase
Как мне решить эту проблему?
Примечание: у меня есть отдельное консольное приложение, которое просто создает один и тот же объект службы и вызывает его, и оно работает без каких-либо проблем.
WCF-объекты домена и IExtensibleDataObject
Типичный сценарий. Мы используем старой школы XML internally web-сервисов для обмена данными между серверами фермы и нескольких распределенных и локальных клиентов. Никакие третьи лица не участвуют, только наши приложения, используемые нами и нашими клиентами.
В настоящее время мы размышляем о переходе от модели XML WS к модели WCF/object-based и экспериментируем с различными подходами. Один из них включает в себя передачу объектов домена / агрегатов непосредственно по проводу, возможно, вызывая атрибуты DataContract на них.
Используя IExtensibleDataObject и DataContract с помощью свойства Order на DataMembers, мы должны быть в состоянии справиться с простыми проблемами управления версиями свойств (помните, что мы контролируем всех клиентов и можем легко принудительно обновить их).
Я постоянно слышу, что мы должны использовать выделенные объекты передачи данных только для передачи данных ( DTOs ) по проводу.
Почему? Есть ли еще причина для этого? Мы используем одну и ту же модель домена на стороне сервера и на стороне клиента, конечно, предварительно заполняя коллекции и т. д. только в том случае, когда это считается правильным, и свойства коллекции "necessary." используют принцип Service locator и IoC для вызова либо NHibernate-based "service" для прямой выборки данных (на стороне сервера), либо клиента WCF "service" на стороне клиента для связи с фермой серверов WCF .
Итак-почему мы должны использовать DTOs ?
guid REST URL для вызова службы данных ado.net?
Попытка использовать guid в качестве идентификатора ресурса в rest url, но не может найти какой-либо ресурс о том, как это сделать. Мой лучший прямо сейчас (не работает, хотя) это: http://localhost:49157/PhotogalleryDS.svc/gallery ('1d03beb3-6d63-498b-aad7-fab0b1480996') (Я пробовал duouble / одинарные кавычки. А также {guid....} с фигурными скобками. Все равно не повезло.
я только получаю: Синтаксическая ошибка '"' в позиции 0.
Вопрос: как бы я (в отношении спецификации) написал url для ресурса, где идентификатор является guid?